gpt4 book ai didi

regex - 如何在 Perl 中有效地匹配许多不同的正则表达式模式?

转载 作者:行者123 更新时间:2023-12-04 16:22:52 28 4
gpt4 key购买 nike

我有一个越来越多的正则表达式列表,我用它们来解析日志文件,搜索“有趣的”错误和调试语句。我目前将它们分成 5 个桶,其中大部分分为 3 个大桶。到目前为止,我有超过 140 种模式,而且这个列表还在继续增长。

大多数正则表达式都很简单,但它们也相当独特,所以我用单个模式捕获多个匹配项的机会很少。由于我匹配的内容的性质,模式往往是模糊的,因此很少匹配,所以我在每个输入行上做了大量的工作,最终结果是它无法匹配任何东西,或匹配最后的通用之一。

而且由于输入的数量(数百兆字节的日志文件),我有时需要等待一两分钟才能完成脚本。因此,我希望有一个更有效的解决方案。不过,我对为了速度而牺牲清晰度不感兴趣。

我目前的正则表达式设置如下:

 if (($line =~ m{Failed in routing out}) ||
($line =~ m{Agent .+ failed}) ||
($line =~ m{Record Not Exist in DB}) ||
...

有没有更好的方法来构建它,使其更有效,但仍可维护?谢谢!

最佳答案

您可以将正则表达式与交替运算符 | 结合使用,如:/pattern1|pattern2|pattern3/
显然,如果您将所有这些都放在一行中,它的维护性将不会很好,但是您已经
有选项可以减轻这种情况。

  • 您可以使用 /x正则表达式修饰符来很好地分隔它们,每行一个。如果您选择这个方向,请注意:您必须明确指定您期望的空格字符,否则它们将被忽略,因为 /x .
  • 您可以通过组合各个源在运行时生成正则表达式。像这样的东西(未经测试):
    my $regex = join '|', @sources;
    while (<>) {
    next unless /$regex/o;
    say;
    }
  • 关于regex - 如何在 Perl 中有效地匹配许多不同的正则表达式模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1478083/

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