Estoy usando un programa Perl para extraer texto de un archivo. Tengo una matriz de cadenas que utilizo como delimitadores para el texto, por ejemplo:¿Cómo manejo los caracteres especiales en una expresión regular de Perl?
$pat = $arr[1] . '(.*?)' . $arr[2];
if ($src =~ /$pat/) {
print $1;
}
Sin embargo, dos de las cadenas en la matriz son $450
y (Buy now)
. El problema con estos es que los símbolos en las cadenas representan el final de la cadena y el grupo de captura en las expresiones regulares de Perl, por lo que el texto no se analiza como lo pretendo.
¿Hay alguna forma de evitar esto?
Específicamente, \ Q no protegerá contra caracteres escapados de barra invertida. quotemeta es, de lejos, la solución más general. –
@BenBlank: ¿De qué estás hablando? '\ Q' * se compila en *' quotemeta'. Ellos son la misma función. Del mismo modo, '\ L' compila en' lc', '\ U' en' uc', etc. '\ Q'" protege contra "caracteres de escape de barra invertida perfectamente, porque ** ¡es' \ Q' después de todo! ** – tchrist