是否可以使用原子组(或其他方式)来模拟占有量词(.NET不支持)?
注意。 我发现(x+x+)++y
可以替换为(?>(x+x+)+)y
,但这只是一个例子,我不知道是否总是{something}@+
等于(?>{something}@)
(其中@
是量词)。
是否可以使用原子组(或其他方式)来模拟占有量词(.NET不支持)?
注意。 我发现(x+x+)++y
可以替换为(?>(x+x+)+)y
,但这只是一个例子,我不知道是否总是{something}@+
等于(?>{something}@)
(其中@
是量词)。
是的。我可以引用大师Jeffrey Friedl在他的经典著作精通正则表达式(第三版)第142页上的话:
"从某种意义上讲,占有量词只是一种语法糖,因为它们可以通过原子分组来模拟。像
.++
这样的表达式与(?>.+)
完全相同,尽管聪明的实现可以比原子分组更优化占有量词。"
不,那就是全部内容了。所有权量词只是原子组的便捷缩写。
如果你使用不支持原子组(如JavaScript和Python)的语法,你可以使用前瞻来达到同样的效果:
(?=((x+x+)+))\1y
向前查看与原子组类似,但它不会消耗匹配的内容。因此,您需要将其内容放入一个捕获组中,然后使用反向引用来进行消耗。
(?>...)
不是一样的吗?我不确定我理解你的问题。” - Kobi