Начните с этого ресурса http://regexper.com/#[a]%28[a|b]%29[c] помогает по полочкам разложить в голове именно логику регекспов, остальное больше практика.
function is_url($url) {
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}
if ( !is_url($url) ) echo 'URL not valid';