16

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

笔记。我发现(x+x+)++y可以用 替换(?>(x+x+)+)y,但这只是一个例子,我不知道是否总是{something}@+等于(?>{something}@)@量词在哪里)。

4

2 回答 2

28

是的。我可以从他的经典Mastering Regular Expressions (3rd Edition)的第 142 页引用大师本人 Jeffrey Friedl 的话:

“从某种意义上说,所有格量词只是句法糖,因为它们可以用原子分组来模仿。类似.++的结果与 完全相同(?>.+),尽管智能实现可以比原子分组更优化所有格量词。”

于 2011-04-05T00:01:51.347 回答
8

不,仅此而已。占有量词只是原子团的一种方便的简写。

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

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

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

于 2011-04-04T23:46:16.377 回答