gpt4 book ai didi

`(a|e|i|o|u)? ` 和 `([aeiou])?` 之间的正则表达式性能

转载 作者:行者123 更新时间:2023-12-01 23:33:44 25 4
gpt4 key购买 nike

看来 (a|e|i|o|u)?[aeiou]? 的效果是一样的,不知道有没有显着的性能上的差异。

最佳答案

在您给出的示例中,使用类而不是交替有很大的好处。

例如:

string 'abcde'
regex1 /(a|e|i|o|u)cde/
regex2 /[aeiou]cde/

将 regex1 或 regex2 应用于该字符串将失败,但是幕后发生了什么?

Regex1 获取字符串的第一个字符并查看它是否与正则表达式匹配,因此它会根据匹配的 (a|e|i|o|u) 检查 'a',但是正则表达式引擎还注意到还有 4 个其他交替如果稍后失败,可以对其进行测试。然后它获取字符串的第二个字符并将其与正则表达式“c”的第二个原子组进行匹配这会导致正则表达式失败,但是它仍然有 4 个其他“状态”可用于尝试进行匹配,因此正则表达式引擎将后退一步并尝试将字符串的第一个字符与 e i o u 进行匹配,然后再确定正则表达式将完全失败并退出。

另一方面,正则表达式 2 决定字符串 'a' 的第一个字符是类 [aeiou] 中的一个字符,不会创建更多状态,因此当第二个字符无法匹配时,它会失败退出, 比 regex1 快得多。

正则表达式的内部工作原理还有很多,因为有两种类型的引擎(确定性和非确定性),但如果您有兴趣阅读更多 regular-expressions.info对正在发生的事情有非常详细的描述。

关于 `(a|e|i|o|u)? ` 和 `([aeiou])?` 之间的正则表达式性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14496515/

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