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

変数を正規表現パターンとして使用する方法を誰かに説明してもらえますか?

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

したがって、qrquoteのような演算子を使用してください。

于 2013-02-23T15:04:13.260 に答える
9

\Q一重引用符で囲まれた/補間されていない文字列では使用できません。字句解析プログラムで確認する必要があります。

とにかく、チルダはメタ文字ではありません。

追加use regex "debug"すると、実際に何が起こっているかがわかります。

于 2013-02-23T15:02:33.703 に答える