Regex 正则表达式中的零宽度元素是什么?
最近,我在正则表达式中看到了“零宽度元素”。它们是什么?它们是否可以被视为重影数据,以便在替换时不会被替换,而对于Regex 正则表达式中的零宽度元素是什么?,regex,Regex,最近,我在正则表达式中看到了“零宽度元素”。它们是什么?它们是否可以被视为重影数据,以便在替换时不会被替换,而对于()匹配,它们不会进入匹配[1],匹配[2],等等 对于它的各种用途有好的教程吗?他们在这里很久了吗?O'Reilly的正则表达式书的哪个版本是第一个讨论它们的?零宽度环顾断言的要点是,它们检查某个正则表达式是否可以从当前位置向前或向后匹配,而不实际将它们添加到匹配中。因此,是的,他们不会计入捕获组,而且是的,他们的匹配不会被替换(因为他们一开始就不匹配) 但是,您可以在lookar
()
匹配,它们不会进入匹配[1]
,匹配[2]
,等等
对于它的各种用途有好的教程吗?他们在这里很久了吗?O'Reilly的正则表达式书的哪个版本是第一个讨论它们的?零宽度环顾断言的要点是,它们检查某个正则表达式是否可以从当前位置向前或向后匹配,而不实际将它们添加到匹配中。因此,是的,他们不会计入捕获组,而且是的,他们的匹配不会被替换(因为他们一开始就不匹配) 但是,您可以在lookaround断言中包含一个捕获组,该断言将进入
匹配[1]
等
例如,在C#中:
将返回abb
关于正则表达式的一个很好的在线教程可以在上找到(尽管它在某些领域有点过时)
它包含关于(和)的特定部分
当然,它们在和中都有深入的介绍。为了确保我们在同一页上,您是在谈论像这里记录的断言吗?是的,还有
代码>,?,?有很多。你有什么特别的问题吗?如果不是的话,我建议您查看关于断言的文档(以及我上面评论中的链接,不管怎样,都是针对.NET的)。您是在使用.NET正则表达式还是其他方言?O'Reilly有,但我想您的意思是(目前在其2006年第3版)或(目前在其2007年第2版)。在零宽度正则表达式中捕获组在许多正则表达式实现中都被捕获,包括PCRE
Regex.Replace("ab", "(a)(?=(b))", "$1$2");