正则表达式中的零宽度元素是什么?
问题描述:
最近,我在正则表达式中看到“零宽度元素”。他们是什么?他们可以被视为鬼数据,以便替换,他们将不会被替换,并为()
匹配,他们不会进入matches[1]
,matches[2]
等?正则表达式中的零宽度元素是什么?
是否有一个很好的教程,其所有各种用途?他们在这里呆了很久吗?哪个版本的O'Reilly正则表达式书是第一个讨论它们的?
答
零宽度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 Expressions和Regular Expressions Cookbook中均有详细介绍。
为了确保我们在同一页面上,您是否在讨论像这里记录的断言? http://msdn.microsoft.com/en-us/library/h5181w5w(v=VS.71).aspx – Welbog 2010-11-25 20:56:41
是的,和`?!`,`? 2010-11-25 20:57:50