开发者

What is this Regex doing: new Regex(@"(?<!\\),");

开发者 https://www.devze.com 2023-01-04 23:47 出处:网络
Regex rx = new Regex(@\"(?<!\\\\\\\\),\"); String test = \"OU=James\\\\, Brown,OU=Test,DC=Internal,DC=Net\";
Regex rx = new Regex(@"(?<!\\\\),");
String test = "OU=James\\, Brown,OU=Test,DC=Internal,DC=Net";

This works perfectly, but I want to understand it. I've been gooling without success. Can somebody give me a word or phra开发者_高级运维se that I can use to look this up and understand it.

I would have thought that it should be written like this:

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

I've seen the (?zzzzzz) syntax before. It's the <! part that I'm stumped by.


(?<!…) is a negative look-behind assertion. In your regex

(?<!\\\\),

the , matches a comma obviously. The \\\\ matches 2 backslashes. Then (?<!\\\\), matches any commas not preceeded by 2 backslashes.

Therefore it will match the , before the OU and DC, but not between James and Brown:

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


The <! part indicates a negative lookbehind. The rest of the expression (just a comma) matches only if it's not preceded by a backslash (or two backslashes, depending on whether the title or the body of your question is the accurate one).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号