2011-03-02 90 views
0

我在正則表達式和@字符應用程序發現了一個奇怪的行爲,隨後用(什麼呢@意味着
這裏有我的.Net JScript中的兩個例子適應語言:正則表達式:前(

//Using .Net Regex class 
echo(Regex.IsMatch(".DOMAIN.S", "^\\.DOMAIN\\.S(\\.\\w*|\\b)"));//True 
echo(Regex.IsMatch("[email protected]", "^\\.DOMAIN\\[email protected](\\.\\w*|\\b)"));//False !! 

//Using JScript syntax 
var re = /^\.DOMAIN\.S(\.\w*|\b)/g; 
echo(re.exec(".DOMAIN.S") != null); //Ok 
re = /^\.DOMAIN\[email protected](\.\w*|\b)/g; 
echo(re.exec("[email protected]") != null); //Null !! 

刪除(。\ w * | \ b)使測試成功,所以我解釋了@後面跟一個(在正則表達式中有特殊含義
1.它是什麼意思?
2.應該是什麼良好的表達?

ks非常多。
ED

+0

對於你的第二點,你能澄清你的意圖嗎?舉例說明你想要匹配什麼,以及你不想匹配什麼。 –

回答

3

Regex.IsMatch("[email protected]", "^\\.DOMAIN\\[email protected](\\.\\w*|\\b)")是返回false,因爲^\\.DOMAIN\\[email protected]是匹配整個字符串,然後你正在尋找一個時期和單詞字符,其中有沒有,或者單詞邊界。據regular-expression.info

有跡象表明,有資格作爲單詞邊界的三個不同位置 :

  • 字符串中的第一個字符之前,如果第一個字符是一個
    單詞字符。
  • 在字符串中的最後一個字符後面,如果最後一個字符是
    單詞字符。
  • 字符串中的兩個字符之間,其中一個字是 字符,另一個字符不是 字符。

at符號是不發一言的性格,所以第二顆子彈是假的。

所以,要真正回答你的問題,at符號在正則表達式中並不特別。

1

這不是@這是造成你的問題,這是\b

\b匹配單詞界限:在".DOMAIN.S"的末尾有一個,而在"[email protected]"的末尾沒有一個。這解釋了爲什麼你在第一種情況下得到一個匹配,但不是第二個。

+0

感謝每一個人! reg exp是合乎邏輯的,但對我而言很陌生......我學到了一些東西,很好。 – edid