2011-12-30 34 views
2

我在我的網絡應用程序中有兩個可能的URL。PHP的正則表達式 - 如何uniqely匹配域?

  1. www.domain.com
  2. www.user.domain.com

現在我需要兩個PHP regexs將每個URL唯一匹配。

我寫了兩個regexs:

1. (www\.)?(domain)(\.)(com) 
2. (www\.)?([a-z]+)(\.)(domain)(\.)(com) 

第一個將匹配第一個URL。 第二個將匹配第二個URL,但它也會匹配第一個URL。那就是問題所在。

如何編寫正則表達式以非常好地匹配每個URL?

這裏是鏈接到rubular premalink,所以你可以看到我的問題是什麼。 LINK:Rubular

+1

難道都具有可選的'www'? 'user.domain.com'也能工作嗎? – sberry 2011-12-30 04:38:54

+0

爲什麼不在'.'上分割並查看是否有一個結果數組包含在另一箇中? – 2011-12-30 04:42:04

+0

@ d3v3us是的,兩者都應該使用或不使用www。那麼(www \。)?一開始應該在那裏,我想。但是,他們必須有可選的www。 – Limeni 2011-12-30 04:42:20

回答

0

嘗試:

^(((www\.)([a-z]+))|(?!(www\.))([a-z]+))(\.)(domain)(\.)(com)$ 
+0

這會起作用,儘管它對你正在嘗試做的事情有點難以理解,並開始擺脫使用正則表達式的力量。在我有這樣的事情的時候,我會評估一些類似於@Jack在問題的評論中所建議的事情,然後拆分域並檢查它的部分。 – sberry 2011-12-30 04:54:41

+0

@random_user - 男人你搖滾! :) 非常感謝! – Limeni 2011-12-30 04:56:19

+0

@ d3v3us - 謝謝,Il也嘗試一下,並檢查最佳效果! – Limeni 2011-12-30 04:59:31