regex: ¿Cómo escapar de las barras invertidas y los caracteres especiales?
¿Hay alguna forma de escapar (o proteger) caracteres especiales en una expresión regular?
Lo que me gustaría hacer es crear un simple probador de expresiones regulares:
import java.util.regex.*;
class TestRegex {
public static void main( String ... args ) {
System.out.printf("%s ~= %s ? %s %n" , args[0], args[1], Pattern.matches( args[0], args[1] ) );
}
}
Lo que funciona muy bien para probar mis patrones antes de conectarlos al programa:
$java TestRegex "\d" 1
\d ~= 1 ? true
$java TestRegex "\d" 12
\d ~= 12 ? false
$java TestRegex "\d+" 12
\d+ ~= 12 ? true
$java TestRegex "\d+" a12
\d+ ~= a12 ? false
$java TestRegex "\d+" ""
\d+ ~= ? false
Lo siguiente que hago es usar este patrón en mi programa, pero cada vez que tengo que escaparlo manualmente:
Pattern p = Pattern.compile( /*copy pasted regex here */ );
Y en esta muestra, sustituya:\d
con\\d
. Después de un tiempo esto se vuelve muy irritante.
P. ¿Cómo puedo escapar automáticamente de estos caracteres especiales?