所以我得到了这个URL regex:
/(?:((?:^-/"':!=a-z0-9_@|^|\:))((https?://)((?:^\p{P}\p{Lo}\s.-|^\p{P}\p{Lo}\s)+.a-z{2,}(?::0-9+)(/?:(?):([a-Z0-9!*‘;::=+$/%#[[]-_,~]++\\$/%#[[]-_,~]+/\?(?:[a-Z0-9!*‘;:=+$$/%#[]-_~],(?!\s))*a-Z0-9=#/?)?(a-Z0-9!*’);:&=+$/%#[]-_.,~]*a-Z0-9_&&=#/)/iux
它目前正在匹配的是:
我也需要它来匹配:
我试着将协议作为regex可选的一部分,通过扇一个?“在结尾”(https?:\//)?但这没什么用。
想法?
发布于 2011-08-03 22:30:52
我会用你用来做这件事的语言寻找一些东西。URL很难与正则表达式相匹配。如果你坚持,我改变了你的,使(https?://)可选。不过我没查过。
/(?:((?:[^-/"':!=a-z0-9_@]|^|\:))((https?://)?((?:[^\p{P}\p{Lo}\s].-|[^\p{P}\p{Lo}\s])+.[a-z]{2,}(?::[0-9]+)?)(/(?:(?:([a-z0-9!*';:=+\$/%#[]-_,~]+))|@[a-z0-9!*';:=+\$/%#[]-_,~]+/|[.\,]?(?:[a-z0-9!*';:=+\$/%#[]-_~]|,(?!\s)))*[a-z0-9=#/]?)?(\?[a-z0-9!*'();:&=+\$/%#[]-_.,~]*[a-z0-9_&=#/])?))/iux我从RFC 3986获得了这个例子,是由这句话指导的。尽管如此,我还是建议您使用您正在使用的任何语言中的一些东西,而不是正则表达式。
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?既然您使用的是PHP,那么您考虑过使用url吗?看起来它会在坏urls上返回false。
https://stackoverflow.com/questions/6934069
复制相似问题