¿Hay alguna manera de escapar (o proteger) los caracteres especiales en una expresión regular?regex: ¿cómo escapar barras diagonales inversas y caracteres especiales?
Lo que me gustaría hacer es crear un sencillo comprobador 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]));
}
}
Qué funciona muy bien para poner a prueba mis patrones antes de plug-in de ellas en el 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
El siguiente Lo que hago es usar este patrón en mi programa, pero cada vez que tengo que escabullirlo 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?
consigo: 'Excepción en hilo java.util.regex.PatternSyntaxException "principal": error interno inesperado cerca de índice 1 'http://pastebin.com/aEWSibXv – OscarRyz
Son momentos como estos en los que deseo que Java tenga una mejor sintaxis para cadenas literales. – Hiro2k
@Oscar: oops, tienes que escapar una vez por un String literal y otra vez porque 'replaceAll' es en sí mismo una expresión regular. Corregido ahora. –