使用Perl中的Binding运算符搜索特殊的字符串模式

时间:2013-09-12 11:24:54

标签: perl scripting pattern-matching

我有一个perl脚本解析日志并搜索像Error,Fatal这样的特定模式并确定Pass和Fail状态。 来到我的问题我需要搜索uniq模式,如“错误(E302 / FEP0512SRA)”如果这样的模式是在任何日志文件行中的presnet它应该将error_cnt增加1。

我尝试了“\”和下面的approch,但在这两种情况下我都未能抓住上面提到的模式。

my $str = "Error (E302/FEP0512SRA)";
if($line =~ /$str/) {
      $error_cnt++;      
}

请让我知道我还能做些什么,所以我可以在日志中记下这个字符串。

2 个答案:

答案 0 :(得分:3)

您的字符串包含regex metacharacters(括号)。您应该手动逃避它们,或使用quotemeta

my $str = quotemeta "Error (E302/FEP0512SRA)";

答案 1 :(得分:2)

正则表达式包含许多运算符,即所谓的元字符。 Parens ()是这样的元字符,必须进行转义。 Perl为此提供quotemeta函数。在正则表达式中,我们可以使用等效的\Q...\E环境,为我们处理这个问题。然后:

$error_cnt++ if $line =~ /\Q$str\E/;