Sto usando un programma Perl per estrarre il testo da un file. Ho un array di stringhe che uso come delimitatori per il testo, per esempio:Come si gestiscono caratteri speciali in un'espressione regolare Perl?
$pat = $arr[1] . '(.*?)' . $arr[2];
if ($src =~ /$pat/) {
print $1;
}
Tuttavia, due delle stringhe nella matrice sono $450
e (Buy now)
. Il problema con questi è che i simboli nelle string rappresentano il gruppo di fine stringa e di cattura nelle espressioni regolari di Perl, quindi il testo non analizza come intendo.
C'è un modo per aggirare questo?
In particolare, \ Q non protegge dai caratteri di escape backslash. quotemeta è di gran lunga la soluzione più generale. –
@BenBlank: Di cosa stai parlando? '\ Q' * compila in *' quotemeta'. Sono la stessa funzione. Allo stesso modo, '\ L' compila in' lc', '\ U' in' uc', ecc. '\ Q'" protegge contro "i caratteri di escape backslash perfettamente bene, perché ** è' \ Q' dopo tutto! ** – tchrist