web-dev-qa-db-ja.com

RegExパターンとして変数を使用

ファイル名を一致させるための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パターンとして使用する方法を説明できますか?

19
Ted

\Qは、単一引用符で囲まれた文字列または補間されていない文字列では使用できません。字句解析器が見る必要があります。

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

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

7
tchrist

ドキュメント のように:

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

したがって、qr引用符のような演算子を使用します。

55
ArtM