gpt4 book ai didi

regex - 原子基团和非捕获基团有什么区别?

转载 作者:行者123 更新时间:2023-12-01 17:43:17 27 4
gpt4 key购买 nike

  1. 什么是原子组 ((?>expr)) 以及它的用途是什么?在 https://www.regular-expressions.info/atomic.html ,唯一的例子是当 expr 是交替时,例如正则表达式 a(?>bc|b)c 匹配 abcc 但不匹配 abc。有没有 expr 不交替的例子?
  2. 原子组和非捕获组 ((?:expr)) 是同一件事吗?

最佳答案

  1. 使用原子组时,如果完整的正则表达式尚未与给定字符串匹配,则正则表达式引擎将不会回溯以进行进一步的排列。

    每当您使用替换时,如果成功,正则表达式将立即尝试匹配表达式的其余部分。尽管如此,它仍会跟踪可能进行其他替换的位置。如果表达式的其余部分不匹配,正则表达式将返回到之前提到的位置并尝试其他组合。如果使用了原子分组,则正则表达式引擎将不会跟踪先前的位置,并且只会放弃匹配。

    上面的例子没有解释使用原子组的目的。它只是演示了回溯的消除。原子组将用于使用贪婪量词的特定场景,并且即使没有交替,也可以进行进一步的组合。

  2. 原子基团和非捕获基团是不同的。非捕获组不会保存匹配值,而原子组会在需要进一步组合时禁用回溯。

例如,正则表达式 a(?:bc|b)c 匹配 abccabc (不捕获匹配项) ,而 a(?>bc|c)c 仅匹配 abcc。如果正则表达式为 a(?>b|bc)c,则仅匹配 abc,而 a(?:b|bc)c > 仍然会匹配两者。

关于regex - 原子基团和非捕获基团有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6488944/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com