Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式中的零宽度元素是什么?_Regex - Fatal编程技术网

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");