regex: Como escapar de barras invertidas e caracteres especiais?
Existe uma maneira de escapar (ou proteger) caracteres especiais em uma expressão regular?
O que eu gostaria de fazer é criar um simples testador de regex:
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] ) );
}
}
O que funciona muito bem para testar meus padrões antes de inseri-los no 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
A próxima coisa que faço é usar esse padrão no meu programa, mas cada vez que preciso escapar manualmente:
Pattern p = Pattern.compile( /*copy pasted regex here */ );
E nesta amostra, substitua:\d
com\\d
. Depois de um tempo, isso se torna muito irritante.
Q. Como posso escapar automaticamente desses caracteres especiais?