2011-08-03 38 views
0
協議

所以我有了這個URL正則表達式:Regexing網址,有和沒有在PHP

/(((:^ - /「」:?!= 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 =#/])(\ S?!)? (\?[a-z0-9!*'();:& = + \ $ /%#[] -_。,〜] * [a-z0-9_ & =#/])?))/ iux

什麼它目前匹配:

我需要它也匹配:

  • www.google.com
  • google.com

我試圖使協議正則表達式的一部分可以通過打一個?在末尾「(https?:\/\ /)?」但那沒有做任何事情。

想法?

+0

可能的重複[什麼是最好的正則表達式來檢查一個字符串是一個有效的URL?](http://stackoverflow.com/questions/161738/what-is-the-best-regular-expression-to -check-if-a-string-is-a-valid-url) – gpojd

回答

3

我會尋找你正在用來做這件事的語言。網址很難與正則表達式匹配。如果你堅持,我改變了你的選擇(https?://)。我沒有檢查它。

/(?:((?:[^-/"':[email protected]]|^|\:))((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?它看起來會在壞的URL上返回false。

+0

在我的文章中已經提到使得(https?://)可選似乎並不想工作。 –

+0

我錯過了,但它爲我工作。你使用什麼語言/正則表達式引擎? – gpojd

+0

在PCRE中使用PHP。 –