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 :
"从某种意义上说,占有量词只是语法糖,因为它们可以通过原子分组来模仿.类似的东西
.++具有完全相同的结果(?>.+),尽管智能实现可以比原子分组更优化占有量词."
不,这就是它的全部.占有量词只是原子团体的便捷缩写.
现在,如果您使用的是不支持原子组的类型(如JavaScript和Python),您可以使用前瞻来获得相同的效果:
(?=((x+x+)+))\1y
Run Code Online (Sandbox Code Playgroud)
超前工作就像一个原子组,除了它不消耗它匹配的东西.因此,您将其内容包装在捕获组中,然后使用反向引用来进行消费.