模拟占有量词

时间:2011-04-04 11:00:00

标签: .net regex quantifiers

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

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

2 个答案:

答案 0 :(得分:23)

烨。我可以引用他自己的主人Jeffrey Friedl,来自他的经典Mastering Regular Expressions (3rd Edition)的第142页:

  

“从某种意义上说,占有量词只是语法糖,因为它们可以通过原子分组来模仿。像.++这样的结果与(?>.+)具有完全相同的结果,尽管智能实现可以优化占有量词不仅仅是原子分组。“

答案 1 :(得分:6)

不,这就是它的全部。占有量词只是原子团体的便捷缩写。

现在,如果您使用的是不支持原子组的类型(如JavaScript和Python),您可以使用前瞻来获得相同的效果:

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

前瞻就像原子组一样,只是它没有消耗它匹配的东西。因此,您将其内容包装在捕获组中,然后使用反向引用来进行消费。