web-dev-qa-db-fra.com

Utiliser une variable comme modèle RegEx

J'aimerais utiliser une variable comme modèle RegEx pour faire correspondre les noms de fichiers:

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";

Le résultat (ou sur ideone.com ):

0
0
1

Quelqu'un peut-il m'expliquer comment utiliser une variable comme modèle RegEx?

19
Ted

Vous ne pouvez pas utiliser \Q dans une chaîne entre guillemets simples/non interpolée. Il doit être vu par le lexer.

Quoi qu'il en soit, le tilde n'est pas un méta-caractère.

Ajouter use regex "debug" et vous verrez ce qui se passe réellement.

7
tchrist

Comme documentation dit:

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

Donc, utilisez l'opérateur qr de type guillemet.

55
ArtM