为什么这段代码不起作用?
my $foo = '\aa\bb';
my $bar = '\aa\bb\ee\ss.txt';
say $bar =~ m/^$foo.*$/ ? 'OK' : 'BAD';
使用正斜杠就可以了。
答案 0 :(得分:6)
在将正则表达式放在那里之前,您应该首先使用 quotemeta
。
my $foo = quotemeta('\aa\bb');
放入正则表达式时的反斜杠,带有特殊含义。 quotemeta
将逃脱它们,以便按字面意思匹配它们。
答案 1 :(得分:4)
答案 2 :(得分:2)
您正在使用
/^\aa\bb.*$/
\a
匹配“闹钟”字符。\b
匹配字边界。您希望生成与给定字符串匹配的模式。为此,您可以使用quotemeta
。
my $pat = quotemeta($foo);
/^$pat.*$/
quotemeta
也可以使用\Q..\E
调用。
/^\Q$pat\E.*$/