使用变量作为RegEx模式

时间:2013-02-23 14:59:28

标签: regex perl variables

我想使用变量作为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模式吗?

2 个答案:

答案 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",您将看到实际发生的情况。