模拟占有量词

Luk*_*eSw 15 .net regex quantifiers

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

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

rid*_*ner 26

对.我可以从他的经典Mastering Regular Expressions(第3版)的第142页引用他自己的主人Jeffrey Friedl :

"从某种意义上说,占有量词只是语法糖,因为它们可以通过原子分组来模仿.类似的东西.++具有完全相同的结果(?>.+),尽管智能实现可以比原子分组更优化占有量词."

  • 但愿如此。弗里德尔大帝万岁。+1:) (3认同)

Ala*_*ore 6

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

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

(?=((x+x+)+))\1y
Run Code Online (Sandbox Code Playgroud)

超前工作就像一个原子组,除了它不消耗它匹配的东西.因此,您将其内容包装在捕获组中,然后使用反向引用来进行消费.