得到精确匹配,我匹配2个数组的内容是这样的:的Perl:从grep的
foreach $headerLine(@headerLines)
{
if (grep { $headerLine =~ /$_/} @filterLines)
{
#do something
}
}
我在这里需要一个确切的匹配,但^$_$
不起作用。我该如何解决它?
得到精确匹配,我匹配2个数组的内容是这样的:的Perl:从grep的
foreach $headerLine(@headerLines)
{
if (grep { $headerLine =~ /$_/} @filterLines)
{
#do something
}
}
我在这里需要一个确切的匹配,但^$_$
不起作用。我该如何解决它?
如果您想要完全匹配,则不需要正则表达式。
if (grep { $headerLine eq $_ } @filterLines)
{
#do something
}
你原来的问题很可能是$_
有特殊的正则表达式字符,这些字符将被视为正则表达式的语法,而不是符合这些文字字符。例如,如果$_
是...
它将匹配任何三个字符,而不是确切字符串...
。如果变量不包含有效的正则表达式语法(例如$_ = '('
),这也可能导致错误。
你可以绕过这与\Q...\E
报价字面结构:
if (grep { $headerLine =~ /^\Q$_\E$/} @filterLines)
{
#do something
}
谢谢。这很有帮助。我想知道如何在这种情况下使用端锚。 '/ $ _ $ /'不起作用。 –
@AnupamaG,定义“不起作用”。 – 2016-01-14 05:58:27
我的意思是它不作为行结束符。例如,它也会匹配“能量”和“能量_g” - 而我希望它只匹配前者。 –
也许,你需要通过前面的反斜线逃避'$''\ $'逐字匹配,因为'$'是特殊的意义正则表达式 – Tushar
@Tushar,不,可变插值在正则表达式中工作。转义它将停止变量插值的工作。 – 2016-01-13 10:47:37