正则表达式中的零宽度元素是什么?

nop*_*ole 5 regex

最近,我在正则表达式中看到了"零宽度元素".这些是什么?它们可以被当作鬼的数据,使更换,他们不会被取代,并且( )匹配,他们不会进入matches[1],matches[2]等等?

有各种用途的好教程吗?他们在这儿待了很久吗?哪个版本的O'Reilly的正则表达书是第一个讨论它们的?

Tim*_*ker 5

零宽度外观断言的一点是,它们检查某个正则表达式是否能够或者不能从当前位置向前或向后匹配,而不实际将它们添加到匹配中.所以,是的,它们不会计入捕获组,是的,它们的匹配将不会被替换(因为它们首先不匹配).

但是,您可以将一个捕获组放在一个要进入的环绕声断言中matches[1].

例如,在C#中:

Regex.Replace("ab", "(a)(?=(b))", "$1$2");
Run Code Online (Sandbox Code Playgroud)

会回来的abb.

关于正则表达式的一个非常好的在线教程可以在http://www.regular-expressions.info找到(即使它在某些方面有点过时).

它包含一个关于零宽度环绕声断言的特定部分(和第二部分).

当然,它们在Mastering Regular ExpressionsRegular Expressions Cookbook中都有深入的介绍.