validar url con expresiones regulares

He pasado por todas las formas posibles para tener la expresión regular para la validación de la URL, pero no recibí ninguna … lo que necesito es que la URL pueda ser como

google.com http://google.com https://google.com http://www.google.com https://www.google.com 

pero no debería permitir si solo es google

finalmente, la cosa es que las .extensions son obligatorias

Lo he intentado /^[a-z0-9-]+(.[a-z0-9-]*)(.[a-z0-9-]*)$/

¿Alguien puede ayudarme en este caso?

Prueba esta expresión

 /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[az]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi 

Aceptará todos los casos que mencionó anteriormente

Puede validar URL directamente usando filter_var y FILTER_VALIDATE_URL

 if (filter_var($url, FILTER_VALIDATE_URL) !== false) 

Editar

Con Regex

 $subject = "http://www.google.com"; $pattern = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i"; preg_match($pattern, $subject, $matches); print_r($matches); 

Salida

 Array ( [0] => http://www.google.com ) 

Codepad

 ((https?:|[^.])\/\/w{0,3}[.]?google.[az]{2,4})|google.[az]{2,4} 

No es el más bonito, pero funciona. Lo he consultado en http://regexpal.com/

Si desea crear un validador de dominio realmente bueno, debe obtener una base de datos de dominios TLD y validarlos.

Mozilla tiene esa lista: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1

Aquí hay un módulo de Python para ese https://github.com/nmmmnu/TLDExtractor

Puedes probar lo siguiente

 (^(http|https)://)?(www\.)?\w+\.com