gpt4 book ai didi

regex - 正则表达式原子组是可分配的吗?

转载 作者:行者123 更新时间:2023-12-02 11:26:38 30 4
gpt4 key购买 nike

正则表达式原子组是可分配的吗?

IE。是 (?>A?B?)始终等同于 (?>A?)(?>B?) ?

如果不是,请提供一个反例。

最佳答案

一般原子团

  • 原子团(?>regex1|regex2|regex3)只接受其中的第一个成功匹配。换句话说,它不允许回溯。
  • 正则表达式是从左到右计算的,所以你表达了你想要匹配的顺序。引擎从第一个位置开始,尝试成功匹配,必要时回溯。如果通过表达式的任何路径将导致成功匹配,则它将在该位置匹配。
  • 原子组不是分布式的。考虑通过 ABC 评估的这些模式:(?>(AB?))(?>(BC)) (不匹配)和 (?>(AB?)(BC)) (匹配 ABC )。

  • 带有所有可选组件的原子组

    但是,您的两个部分都是可选的情况可能会有所不同。

    考虑具有 2 个贪婪可选部分 A 和 B( (A)?(B)? )的原子组。在任何位置,如果 A匹配,它可以继续评估可选的 B .否则,如果 A不匹配,也没关系,因为它是可选的。因此, (A)?匹配任何位置。相同的逻辑适用于可选的 B .剩下的问题是回溯是否有任何不同。

    在所有可选部分( (?>A?B?) )的情况下,由于每个部分始终匹配,因此没有理由在原子组内回溯,因此它将始终匹配。然后,由于它在原子组中,因此禁止回溯。

    在单独的原子组 ( (?>A?)(?>B?) ) 的情况下,每个部分始终匹配,并且在任何一种情况下都禁止引擎回溯。这意味着结果将是相同的。

    重申一下,引擎只能使用 (?>A?)(?>B?) 中的第一个可能匹配项。 ,这将始终与 (?>A?B?) 中第一个可能的匹配项相同.因此,如果我的推理是正确的,对于这个 特例 ,匹配将是 多个可选原子组与具有两个可选组件的单个原子组相同。

    关于regex - 正则表达式原子组是可分配的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10823457/

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