所以我有这个URL正则表达式:
/(:((:[^ - /“':= A-Z0-9_ @!] | ^ | \:????))((HTTPS://)((:[^ \ p {p} \ p {螺} \ S] .- |。?[^ \ p {p} \ p {螺} \ S])+ [AZ] {2,}(:: [0-9] +) ?)(/((([A-Z0-9 *! ';:= + \ $ /%#[] -_,〜]!+))| @ [A-Z0-9 *'? ;:= + \ $ /%#[] -_, - ] + / | [\](:[A-Z0-9 *';:?!= + \ $ /%#[] -_ 〜] |))* [A-Z0-9 =#/])(\ [A-Z0-9 *'()(\ S?!);:???!&安培; = + \ $ /% #[] -_,〜] * [A-Z0-9_&安培;?=#/])))/度:iux
目前匹配的内容:
我需要它也匹配:
我尝试通过拍打?使正则表达式的协议部分可选?在结尾“(https?:\ / \ /)?”但那没有做任何事情。
想法?
答案 0 :(得分:3)
我会用你正在使用的语言寻找一些东西。 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
我从the RFC 3986得到了这个例子,并由this comment指示。虽然,我仍然建议使用你正在使用的任何语言而不是正则表达式的东西。
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
由于您使用的是PHP,您是否考虑使用parse_url?看起来它会在坏网址上返回false。