我正在研究这个问题:this answer:Regex nested parentheses,并认为不应该是一个量化的原子组(?> list | of | alternates )*,而应该是一个原子量化的组(?> (?: list | of | alternates )* )。我说错了吗?在regex的世界中,它们是相同的还是不同的?特别是在.NET实现方面?
我个人认为它们不同,我通常使用perl将其转换为(?: list | of | alternates )*+。无论如何,这对我来说要清楚得多,如果需要的话,我想在这个特定的正则表达式(一个原子量化的组)之前回溯。然而,也许这是作为一个设计决策来实现的,在这个设计中,思路是量化的原子群是没有用的?
发布于 2018-01-19 01:37:25
当原子群作为独立表达式被调用时,
回溯确实发生在它的内部,就像其他地方一样。
区别在于原子组无法控制回溯。
外部机制。
因此,一个原子群的每一个量化的传递都只计算一个
实例,该实例不会导致回溯。
但是,如果将量词放在非量化的集群组中。
原子群,影响是整个内容不会影响
外部回溯。
重要的是粒度。
示例
(?>a|b|c)*abc将与aaaaaabbbbbbbbbbbabc匹配
何地as
(?>(?:a|b|c)*)abc将与aaaaaabbbbbbbbbbbabc不匹配
因为(?:a|b|c)*子句消耗了它的全部,没有空间让它
找到abc。
一个好的经验法则是:
如果量词位于原子组的外部,它可以控制回溯。
外部。
如果量词是原子组内部的,它可以控制回溯。
只限于内部。
并且,当您量化一个原子组时,在每次传递时,该流退出
组,这使得pass的结果(作为一个整体)有资格被回溯。
https://stackoverflow.com/questions/48330874
复制相似问题