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

问题描述:

最近,我在正则表达式中看到“零宽度元素”。他们是什么?他们可以被视为鬼数据,以便替换,他们将不会被替换,并为()匹配,他们不会进入matches[1],matches[2]等?正则表达式中的零宽度元素是什么?

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

+0

为了确保我们在同一页面上,您是否在讨论像这里记录的断言? http://msdn.microsoft.com/en-us/library/h5181w5w(v=VS.71).aspx – Welbog 2010-11-25 20:56:41

+0

是的,和`?!`,`? 2010-11-25 20:57:50

零宽度lookaround断言的一点是,它们检查某个正则表达式是否可以匹配从当前位置向前或向后匹配,而不实际将它们添加到匹配中。所以,是的,他们不会计入夺冠组别,是的,他们的比赛将不会被替换(因为他们不是首先匹配)。

但是,您可以捕获组环视断言内部的进入matches[1]

例如,在C#:

Regex.Replace("ab", "(a)(?=(b))", "$1$2"); 

将返回abb

关于正则表达式的一个很好的在线教程一般可以在http://www.regular-expressions.info找到(尽管它在某些领域有点过时了)。

它包含关于zero-width lookaround assertions(和Part II)的特定部分。

当然,它们在Mastering Regular ExpressionsRegular Expressions Cookbook中均有详细介绍。