2010-06-23 151 views
1
Regex rx = new Regex(@"(?<!\\\\),"); 
String test = "OU=James\\, Brown,OU=Test,DC=Internal,DC=Net"; 

這工作完美,但我想了解它。我一直都沒有成功去過。有人能給我一個單詞或短語,我可以用它來查看和理解它。這個正則表達式在做什麼:new Regex(@「(?<!\),」);

我本來認爲它應該這樣寫:

new Regex(@"(\\\\)?,"); 

我以前見過的(?zzzzzz)語法。這是我被難倒的<!部分。

+3

@Srinivas - 他得到了6個問題。 0%的新用戶沒有問題。 – 2010-06-23 15:58:55

+0

最後一次編輯截斷了這個問題,目前它終止於「之前的語法。」這是不正確的形式:-) – Francesco 2010-06-23 15:59:03

+1

我可能是錯的,但我認爲,因爲你在字符串的開頭使用「@」符號只需要兩個反斜槓。 – 2010-06-23 16:04:10

回答

8

(?<!…)negative look-behind assertion。在您的正則表達式中

(?<!\\\\), 

,顯然與逗號相匹配。 \\\\匹配2個反斜槓。然後(?<!\\\\),匹配任何逗號之前沒有 2反斜槓。

因此將匹配OU和DC前,,而不是詹姆斯和布朗之間:

OU=James\\, Brown,OU=Test,DC=Internal,DC=Net 
       ^ ^  ^
4

<!部分表示negative lookbehind。表達式的其餘部分(只是一個逗號)只有在前面沒有反斜槓(或兩個反斜槓,取決於問題的標題或正文是否準確)時才匹配。