我想使用变量作为RegEx模式来匹配文件名:
my $file = "test~";
my $regex1 = '^.+\Q~\E$';
my $regex2 = '^.+\\Q~\\E$';
print int($file =~ m/$regex1/)."\n";
print int($file =~ m/$regex2/)."\n";
print int($file =~ m/^.+\Q~\E$/)."\n";
结果(或ideone.com):
0
0
1
有人可以向我解释如何将变量用作RegEx模式吗?
答案 0 :(得分:55)
正如documentation所说:
$re = qr/$pattern/;
$string =~ /foo${re}bar/; # can be interpolated in other patterns
$string =~ $re; # or used standalone
$string =~ /$re/; # or this way
因此,请使用qr
类似报价的运算符。
答案 1 :(得分:7)
您不能在单引号/非内插字符串中使用\Q
。它必须由词法分析员看到。
无论如何,代字号不是元字符。
添加use regex "debug"
,您将看到实际发生的情况。