gpt4 book ai didi

regex - 原子团清晰度

转载 作者:行者123 更新时间:2023-12-04 03:07:39 24 4
gpt4 key购买 nike

考虑这个正则表达式。

a*b

这将在 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac 的情况下失败

这需要 67调试器中的步骤失败。

现在考虑这个正则表达式。
(?>a*)b

这将在 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac 的情况下失败

这需要 133调试器中的步骤失败。

最后这个正则表达式:
a*+b  (a variant of atomic group)

这将在 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac 的情况下失败

这需要 67调试器中的步骤失败。

当我检查基准时 atomic group (?>a*)b执行 179%快点。

现在原子组禁用回溯。所以在比赛中的表现很好。
  • 但是为什么步数多呢?有人可以解释一下吗?
  • 为什么会有差异。在两个原子组之间的步进(?>a*)ba*+b .

  • 它们的工作方式不同吗?

    最佳答案

    Author note:

        This answer targets question 1 as delivered by the bounty text "I am looking forward to the exact reason why more steps are being needed by the debugger.I dont need answers explaining how atomic groups work.";
        Jerry's answer addresses the other concerns very well, while my other answer takes a ride through the mentioned constructs, how they work, and why they are important. For full knowledge, simply reading this post is not enough!


    正则表达式中的每个组都需要一步步进入和退出该组。
    什么?!
    是的,我是认真的,请继续阅读...
    首先,我想向您展示量化的非捕获组,而不是没有组:
    Pattern 1: (?:c)at
    Pattern 2: cat
    那么这里究竟发生了什么?我们将匹配模式与测试字符串 "concat"在禁用优化的正则表达式引擎上:
    (?:c)at cat
    在此期间,我向您介绍了更多组:
    groups
    不好了!我将避免使用组!
    可是等等! 请注意匹配所采取的步数为 与比赛表现的相关性。 正如我提到的,引擎优化了大部分“不必要的步骤”。 尽管在禁用优化的引擎上采取了更多步骤,但原子组仍然是最有效的。
    也许相关:
  • Why is a character class faster than alternation?
  • 关于regex - 原子团清晰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093501/

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