2014-02-19 54 views
0

這是一塊很大的正則表達式(PHP)的:正則表達式:每一個字母子域,除了WWW

((?:[0-9A-z_-]+)) 

我用它來有效的一個子域,但我願意接受所有的子域除了「 www「

如何在有字母數字」選擇器「的情況下執行此操作?

編輯:最後使用(\b(?!www\b)(?:[0-9A-Za-z_-]+)),感謝Tim和ATS

+1

嘗試'(?!www)'。 [更多信息](http://www.regular-expressions.info/completelines.html)(參見'查找包含或不包含某些單詞的行'段落) – Laoujin

+0

_幾乎_但不完全是[Regex for ANY除「www」之外的字符串? (子域)](http://stackoverflow.com/q/7099397/2936460)。 – SQB

回答

2

試試這個:

((?!www)(?:[0-9A-Za-z_-]+)) 

這使用排除模式說 「不WWW」。

這假定其餘的正則表達式(如你所寫,它是一個更大的表達式的一部分)確保這部分包含只是一個可能的子域。所以這部分應該匹配子域的全部,但不應該檢查它是否全部匹配。
你還需要做什麼,我不能(因爲我不知道你在用什麼),是www後插入適當的邊界檢測。可能\b就足夠了。

+0

謝謝,它的工作! (只能在9分鐘內接受你的回答) –

+0

沒問題,我可以等:) – SQB

+1

不是說這個域名不能包含www?如果是testwwwttest.blah會怎麼樣? – Srb1313711

3

首先,該正則表達式不正確,應該是((?:[0-9A-Za-z_-]+))(或簡單地([\w-]+)-非捕獲組是不必要的)。 Za之間有一些你不想匹配的字符。

其次,使用negative lookahead assertion以確保您匹配的字符串不是www。爲了確保我們不只是考慮的子匹配wwwww(或不匹配wwwwwhat.sgoing.on),可能有必要增加word boundary anchors,根據上下文:

\b(?!www\b)([\w-]+) 
+0

工作正常,謝謝你的解釋,但它接受多個子域(subsubdomain,subsubsubdomain ...),我只是一個有效的 –

+0

好吧,我用了以下內容:(\ b(?!www \ b)(?:[ 0-9A-Za-z _-] +))不接受點 –

0

這對我的作品來驗證子域。

^([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?\.){0,}([a-z0-9]+([\-a-z0-9]*[a-z0-9]+)?){1,63}(\.[a-z0-9]{2,7})+$ 
+1

這不會排除匹配中的'www',這是明確要求的**。 – SQB

相關問題