原子量化组和量化原子组的意思一样吗?

Does an atomic quantified group mean the same as a quantified atomic group?

我正在查看 this answer to this question: Regex nested parentheses,并且认为应该是原子量化组 (?> (?: list | of | alternates )* ) 而不是量化原子组 (?> list | of | alternates )*。我错了吗?它们在正则表达式的世界中是相同的还是不同的?特别是在 .NET 实现方面?

我个人认为它们不同,我通常使用 perl 正则表达式,它会转换为 (?: list | of | alternates )*+。无论如何,这对我来说要清楚得多,说明如果需要(原子量化组)我想在这个特定的正则表达式之前回溯。但是,也许这是作为设计决策实施的,其思路是量化原子组没有用?

当一个原子团被称为独立表达式时,
回溯确实发生在它内部,就像其他任何地方一样。

区别在于原子组无法控制回溯
机制外。

因此,原子团的每次量化通过仅计入一个单次
不会导致回溯的实例。

但是,如果你把量词放在一个簇组里面一个非量化的
原子组,影响是整个内容不会影响
外部回溯。

重要的是粒度。

示例

(?>a|b|c)*abc 将匹配 aaaaaabbbbbbbbbbbabc

其中

(?>(?:a|b|c)*)abc 将不匹配 aaaaaabbbbbbbbbbbabc
因为 (?:a|b|c)* 子句将其全部消耗掉,没有给它留下任何空间
找到 abc

一个好的经验法则是:

如果一个量词外部一个原子组,它可以控制回溯
在外部。

如果一个量词是内部一个原子组,它可以控制回溯
仅限内部。

而且,当您量化一个原子团时,在每次通过时,流程都会退出
组,这使得 that pass' 结果(作为一个整体)有资格被回溯。