29

我想使用一个变量作为匹配文件名的正则表达式模式:

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 模式?

4

2 回答 2

79

正如文件所说:

    $re = qr/$pattern/;
    $string =~ /foo${re}bar/; # can be interpolated in other patterns
    $string =~ $re; # or used standalone
    $string =~ /$re/; # or this way

因此,请使用qr类似引号的运算符。

于 2013-02-23T15:04:13.260 回答
9

您不能\Q在单引号/非插值字符串中使用。词法分析器必须看到它。

无论如何,波浪号不是元字符。

添加use regex "debug",您将看到实际发生的情况。

于 2013-02-23T15:02:33.703 回答