Perl   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Perl中有效地匹配许多不同的正则表达式模式?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有越来越多的正则表达式,我用它来解析搜索“有趣”错误和调试语句的日志文件.我现在将它们分成5个桶,其中大部分都落入3个大桶中.到目前为止,我有超过140种模式,而且这个模式正在不断增长.

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

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

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

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

是否有更好的方法来构建它,以便它更有效,但仍然可维护?谢谢!

解决方法

你可能想看看 Regexp::Assemble.它的目的是处理这类问题.

从模块的概要中提升代码:

use Regexp::Assemble;

my $ra = Regexp::Assemble->new;
$ra->add( 'ab+c' );
$ra->add( 'ab+-' );
$ra->add( 'a\w\d+' );
$ra->add( 'a\d+' );
print $ra->re; # prints a(?:\w?\d+|b+[-c])

你甚至可以从一个单独的文件中啜饮你的正则表达式集合.

大佬总结

以上是大佬教程为你收集整理的如何在Perl中有效地匹配许多不同的正则表达式模式?全部内容,希望文章能够帮你解决如何在Perl中有效地匹配许多不同的正则表达式模式?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。