尝试将字符串与括号匹配。
例如:
my $foo = "debug_bus[0]";
my $bar = "debug_bus[0][12:0] = some_value;";
if ($bar =~ $foo)
{
print "Match\n";
}
else
{
print "No Match\n";
}
我希望"匹配"但我一直在"没有匹配"这让我相信在[0]' [0]'造成问题?
答案 0 :(得分:4)
替换
my $foo = "debug_bus[0]";
用
my $foo = quotemeta "debug_bus[0]";
来自quotemeta文档:
EXP引言EXPR 返回EXPR的值,所有ASCII非 - " word"字符背面。
不使用quotemeta,[0]
被解释为bracketed character class,仅包含0
,然后仅相当于0
。
答案 1 :(得分:4)
您需要使用\Q...\E
(内部)或metacharacters(外部)
quotemeta
因此,您需要:
$bar =~ m/\Q$foo\E/;
或者只是:
$bar =~ /\Q$foo/;
当分隔符为m
时,您可以省略//
,在这种情况下您实际上不需要\E
,因为您的模式中没有其他内容。