这是什么正则表达式:新的正则表达式(@“(?<! - \\),”); - >

时间:2010-06-23 15:54:40

标签: c# regex

Regex rx = new Regex(@"(?<!\\\\),");
String test = "OU=James\\, Brown,OU=Test,DC=Internal,DC=Net";

这很有效,但我想了解它。我一直没有成功。有人可以给我一个单词或短语,我可以用它来查看并理解它。

我原以为它应该这样写:

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

之前我见过(?zzzzzz)语法。这是我被难倒的<!部分。

2 个答案:

答案 0 :(得分:8)

(?<!…)negative look-behind assertion。在你的正则表达式

(?<!\\\\),

,显然与逗号匹配。 \\\\匹配2个反斜杠。然后(?<!\\\\),匹配之前没有 2反斜杠的逗号。

因此,它将与OU和DC之前的,相匹配,但不会与James和Brown之间的匹配:

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

答案 1 :(得分:4)

<!部分表示negative lookbehind。表达式的其余部分(只是逗号)只有在前面没有反斜杠(或两个反斜杠,具体取决于问题的标题或正文是否准确)时才匹配。