$re = '/(?(DEFINE)
(?<WebAddress> (?&Protocol){0,}(?&Host)(?:\:(?&Port)){0,1}(?&Path){0,1})(?=\s|$)
(?<Protocol> \w{2,}\:\/\/)
(?<Host> (?&NameParts)(?&Suffix))
(?<NameParts> (\w{2,}\.){1,})
(?<Suffix> (\w{2,}))
(?<Port> (\d{1,5}))
(?<Path> (\/\S{1,}))
)
((?&WebAddress))/xm';
$str = 'http://asdf.com
http://www.google.com:80/path?asdf-asdf=adsfddk@ffs
http://asdf.com
https://adfdfffdfds.edu
asd.edu:8383
jjhgf.net:21
https://uno.mbsc.asdf.com:1233
google.com
mbsc.unomaha.edu
ftp.unomaha.edu
asdf.com
ftp.dd.dfffffdfdfdfdfdfdfdfdfdfdf
sdf.com
abc.def.com
https://msn.sdf.com:123
http://asd.com
ftp://ftp.mbsc.unomaha.edu:81813
http://www.mbsc.unomaha.edu
https://www.mbsc.unomaha.edu:1231/path?docid=-123
weather.tv
www.google.com
google.com/asdf?coxd
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php