ti-enxame.com

Usar variável como padrão RegEx

Eu gostaria de usar uma variável como um padrão RegEx para nomes de arquivos correspondentes:

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

O resultado (ou em ideone.com ):

0
0
1

Alguém pode me explicar como posso usar uma variável como um padrão RegEx?

19
Ted

Você não pode usar \Q em uma sequência de aspas simples/não interpolada. Deve ser visto pelo lexer.

De qualquer forma, til não é um meta-personagem.

Adicionar use regex "debug" e você verá o que realmente está acontecendo.

7
tchrist

Como documentação diz:

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

Portanto, use o operador como aspas qr.

55
ArtM