gpt4 book ai didi

regex - 为什么字符类比交替更快?

转载 作者:太空宇宙 更新时间:2023-11-04 09:15:49 27 4
gpt4 key购买 nike

在以下示例中,使用字符类似乎比交替更快:
[abc](a|b|c)
我听说有人推荐它,并使用 Time::HiRes 进行了简单测试,我验证了它(速度慢了约 10 倍)。
如果捕获括号产生差异,也可以使用 (?:a|b|c) ,但不会改变结果。
但我不明白为什么。我认为这是因为回溯,但我在每个位置看到的方式都有 3 个字符比较,所以我不确定回溯如何影响交替。这是实现的交替性质的结果吗?

最佳答案

这是因为交替之间的“OR”结构|回溯:如果第一个交替不匹配,引擎必须返回在交替匹配期间移动的指针位置之前,以继续匹配下一个交替;而字符类可以按顺序前进。在禁用优化的正则表达式引擎上查看此匹配:

Pattern: (r|f)at
Match string: carat

alternations

Pattern: [rf]at
Match string: carat

class

<小时/>

但简而言之,事实上 引擎对此进行了优化(单个文字字符 -> 字符类),这已经是一个很好的暗示,表明交替效率低下。

关于regex - 为什么字符类比交替更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59022626/

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