Perl:从grep获得完全匹配

Anu*_*a G 0 regex perl

我匹配2个数组的内容,如下所示:

foreach $headerLine(@headerLines)
{
  if (grep { $headerLine =~ /$_/} @filterLines) 
  {
      #do something
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要一个完全匹配,但^$_$不起作用.我该怎么办呢?

小智 7

如果您想要完全匹配,则不需要正则表达式.

if (grep { $headerLine eq $_ } @filterLines) 
{
    #do something
}
Run Code Online (Sandbox Code Playgroud)

您的原始问题很可能是$_具有特殊的正则表达式字符,并且这些字符被视为正则表达式语法而不是匹配这些文字字符.例如,如果$_...它会匹配任何三个字符,而不是完全匹配的字符串....如果变量不包含有效的正则表达式语法(例如$_ = '('),这也可能导致错误.

你可以使用\Q...\Equote literal结构解决这个问题:

if (grep { $headerLine =~ /^\Q$_\E$/} @filterLines) 
{
    #do something
}
Run Code Online (Sandbox Code Playgroud)