2010-06-23 150 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。表达式的其余部分(只是一个逗号)只有在前面没有反斜杠(或两个反斜杠,取决于问题的标题或正文是否准确)时才匹配。