Шаблон, на который вы ссылаетесь, действительно соответствует множеству URL, как действительных, так и недействительных.Это не удивительно, так как почти все в этом регулярном выражении не является обязательным;как вы писали сами, он даже соответствует bit.ly
, поэтому легко увидеть, как он будет соответствовать множеству не относящихся к URL материалов.
Например, новые доменные имена Unicode не учитываются (например,, http://www.müller.de
).
Он не соответствует действительным URL-адресам, таким как
http://msdn.microsoft.com/en-us/library/aa752574(VS.85).aspx
Он не соответствует относительным путям (хотя и не обязательно), таким как /cgi-bin/version.pl
.
Не соответствует mailto:
ссылкам.
Не соответствует URL-адресам, таким как http://1.2.3.4
.Даже не спрашивайте об IPv6:)
В общем, регулярные выражения НЕ являются подходящим инструментом для надежного сопоставления или проверки URL-адресов.Это работа для парсера.Если вы можете жить со многими ложно-положительными и ложно-отрицательными совпадениями, то регулярные выражения хороши.
Пожалуйста, прочитайте превосходное эссе Яна Гойваэрта на эту тему: Обнаружение URL-адресов в блоке текста .