我匹配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)