2010-01-28 19 views
11

Ho una stringa che può contenere caratteri speciali come: $, (, @, #, ecc. Devo essere in grado di eseguire espressioni regolari su quella stringa.Come faccio a sfuggire a caratteri speciali in una stringa che interpolo in un'espressione regolare Perl?

In questo momento se la mia stringa ha uno qualsiasi di questi caratteri, la regex sembra interrompersi poiché questi sono caratteri riservati per l'espressione regolare.

Qualcuno conosce un buon subroutine che sfuggirebbe bene uno di questi personaggi per me in modo che poi ho potuto fare qualcosa di simile:

$p_id =~ /^$key/ 
+0

Duplicato: http://stackoverflow.com/questions/2135519/why-does-my-regular-expression-fail-with-certain-substitutions –

+1

possibile duplicato di [Come gestisco i caratteri speciali in un'espressione regolare Perl? ] (http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim

risposta

20
$p_id =~ /^\Q$key\E/; 
+0

Cosa fanno \ Q e \ E? – goe

+2

Citazione e endquote. Significa che la chiave $ viene trattata come una stringa senza caratteri speciali. – Steven

+1

@goe, citano i metacaratteri. – daotoad

6

Dalla tua descrizione, sembra che tu hai all'indietro . Non è necessario sfuggire ai caratteri sulla stringa a cui si sta abbinando ($ p_id), è necessario sfuggire alla stringa di corrispondenza '^ $ chiave'.

Data:

$p_id = '$key$^%*&#@^&%$blah!!'; 

Usa:

$p_id =~ /^\$key/; 

o

$p_id =~ /^\Q$key\E/; 

Il \ Q, \ E paio trattare tutto il resto come letterale. In altre parole, non si desidera cercare il contenuto della variabile $ key, ma la stringa effettiva '$ key'. Il primo esempio sfugge semplicemente a $.

Problemi correlati