gpt4 book ai didi

regex - 冗长的Perl正则表达式

转载 作者:行者123 更新时间:2023-12-03 17:14:17 26 4
gpt4 key购买 nike

这似乎是一个奇怪的问题,但无论如何要切题。

我有一个字符串,需要以几种组合搜索许多可能出现的字符(因此,字符类毫无疑问),那么最有效的方法是什么?

我在想将其堆叠到一个正则表达式中:

if ($txt =~ /^(?:really |really |long | regex here)$/){}


或使用几个“较小”的比较,但我认为这不会很有效:

if ($txt =~ /^regex1$/ || $txt =~ /^regex2$/ || $txt =~ /^regex3$/) {}


或者如果比较则嵌套几个。

对于此问题,我将不胜感激,并提供其他建议。
谢谢

最佳答案

从v5.9.2开始,Perl便编译了N种替代方案,例如:

/string1|string2|string3|string4|string5|.../


放入一个trie数据结构中,如果这是模式中的第一件事,甚至可以使用Aho–Corasick匹配来非常快速地找到起点。

这意味着您的N个替代方案的匹配现在将在O(1)时间而不是在O(N)时间运行:

if (/string1/ || /string2/ || /string3/ || /string4/ || /string5/ || ...)


将运行。

因此,您可以选择O(1)或O(N)性能。

如果您 use re "debug"-Mre-debug,Perl将在您的模式中显示这些trie结构。

关于regex - 冗长的Perl正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4909597/

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