是否可以使用原子分组(或以其他方式)模拟占有量词(.NET不支持它)?
请注意。我发现(x+x+)++y
可以替换为(?>(x+x+)+)y
,但这只是一个示例,我不知道始终{something}@+
是否等于(?>{something}@)
(其中@
}是一个量词)。
答案 0 :(得分:23)
烨。我可以引用他自己的主人Jeffrey Friedl,来自他的经典Mastering Regular Expressions (3rd Edition)的第142页:
“从某种意义上说,占有量词只是语法糖,因为它们可以通过原子分组来模仿。像
.++
这样的结果与(?>.+)
具有完全相同的结果,尽管智能实现可以优化占有量词不仅仅是原子分组。“
答案 1 :(得分:6)
不,这就是它的全部。占有量词只是原子团体的便捷缩写。
现在,如果您使用的是不支持原子组的类型(如JavaScript和Python),您可以使用前瞻来获得相同的效果:
(?=((x+x+)+))\1y
前瞻就像原子组一样,只是它没有消耗它匹配的东西。因此,您将其内容包装在捕获组中,然后使用反向引用来进行消费。