Regex rx = new Regex(@"(?<!\\\\),");
String test = "OU=James\\, Brown,OU=Test,DC=Internal,DC=Net";
这很有效,但我想了解它。我一直没有成功。有人可以给我一个单词或短语,我可以用它来查看并理解它。
我原以为它应该这样写:
new Regex(@"(\\\\)?,");
之前我见过(?zzzzzz)
语法。这是我被难倒的<!
部分。
答案 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。表达式的其余部分(只是逗号)只有在前面没有反斜杠(或两个反斜杠,具体取决于问题的标题或正文是否准确)时才匹配。