gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:29:59 36 4
gpt4 key购买 nike

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

最佳答案

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

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

alternations
Pattern: [rf]at
Match string: carat

class

但简而言之,事实是 引擎优化这个(单个文字字符 -> 字符类)已经是一个不错的提示,表明交替效率低下。

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

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