模拟占有量词

19

是否可以使用原子组(或其他方式)来模拟占有量词(.NET不支持)?

注意。 我发现(x+x+)++y可以替换为(?>(x+x+)+)y,但这只是一个例子,我不知道是否总是{something}@+等于(?>{something}@)(其中@是量词)。


(?>...)不是一样的吗?我不确定我理解你的问题。” - Kobi
@Kobi:是的。请查看我的答案,了解大师的详细信息。 - ridgerunner
此问题已添加到Stack Overflow正则表达式FAQ,位于“量词 > 更多差异”下。 - aliteralmind
2个回答

31

是的。我可以引用大师Jeffrey Friedl在他的经典著作精通正则表达式(第三版)第142页上的话:

"从某种意义上讲,占有量词只是一种语法糖,因为它们可以通过原子分组来模拟。像.++这样的表达式与(?>.+)完全相同,尽管聪明的实现可以比原子分组更优化占有量词。"


3
阿门。弗里德尔大帝万岁。+1 :) - zx81

10

不,那就是全部内容了。所有权量词只是原子组的便捷缩写。

如果你使用不支持原子组(如JavaScript和Python)的语法,你可以使用前瞻来达到同样的效果:

(?=((x+x+)+))\1y

向前查看与原子组类似,但它不会消耗匹配的内容。因此,您需要将其内容放入一个捕获组中,然后使用反向引用来进行消耗。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接