2013-04-11 71 views
1

我試過下面的模式與([]很多變化但我無法實現我的目標。php REGEX匹配自定義網址結構問題

$pattern = '/^http:\/\/www.mydomain.p.ht\/?[\p{L}\p{N}\-]{0,36}\/?[\p{L}\p{N}\-]{0,51}\/?[\p{L}\p{N}\-]{0,101}$/'; 

我的宗旨是:以符合我需要的URL結構

  1. http://www.mydomain.p.ht
  2. 0或1 /斜槓
  3. UTF-8意識到字母,數字和連字符。總長度爲分鐘 0,最大值36
  4. 0或1 /斜槓字符
  5. utf-8的感知字母,數字和連字符。總長度爲分鐘 0,最大值51
  6. 0或1 /斜槓字符
  7. utf-8的感知字母,數字和連字符。總長度最小 0,最大101.在最後不得存在/斜槓字符。

當前http://www.mydomain.p.ht/1234561-234561234561234-56123456123456şğ匹配,但它不應該自1234561-234561234561234-56123456123456şğ部分有超過36個字符。

你能改正我的模式嗎?

回答

2

只需校正正則表達式本身

/^http:\/\/www.mydomain.p.ht(\/|\/[\p{L}\p{N}\-]{1,36}(\/|\/[\p{L}\p{N}\-]{1,51}(\/|\/[\p{L}\p{N}\-]{1,101})?)?)?$/ 

的問題是,使/可選允許正則表達式到的多個結合[\ p {L} \ p {N} - ]組來匹配更多然後36或51個字符等等。我做了一個假設,你不能有http://www.mydomain.p.ht//1234561-234561234561234-56123456123456şğ,注意雙/

有關其他信息,我強烈reccommend http://www.regular-expressions.info/

+0

太感謝你了。金槍殺。 +1以獲得額外解釋。將在5分鐘後被接受。 – 2013-04-11 15:44:32

+1

哈哈,np,我喜歡用正則表達式 – 2013-04-11 15:45:00