Escapar de caracteres especiales en Java Regular Expressions

¿Hay algún método en Java o alguna biblioteca de código abierto para escapar (no citar) un carácter especial (meta-carácter), para usarlo como una expresión regular?

Esto sería muy útil para construir dinámicamente una expresión regular, sin tener que escapar manualmente cada carácter individual.

Por ejemplo, considere un regex simple como\d+\.\d+ que coincide con los números con un punto decimal como1.2, así como el siguiente código:

String digit = "d";
String point = ".";
String regex1 = "\\d+\\.\\d+";
String regex2 = Pattern.quote(digit + "+" + point + digit + "+");

Pattern numbers1 = Pattern.compile(regex1);
Pattern numbers2 = Pattern.compile(regex2);

System.out.println("Regex 1: " + regex1);

if (numbers1.matcher("1.2").matches()) {
    System.out.println("\tMatch");
} else {
    System.out.println("\tNo match");
}

System.out.println("Regex 2: " + regex2);

if (numbers2.matcher("1.2").matches()) {
    System.out.println("\tMatch");
} else {
    System.out.println("\tNo match");
}

No en vano, la salida producida por el código anterior es:

Regex 1: \d+\.\d+
    Match
Regex 2: \Qd+.d+\E
    No match

Es decir,regex1 partidos1.2 peroregex2 (que se construye "dinámicamente") no (en cambio, coincide con la cadena literald+.d+).

Entonces, ¿hay un método que escape automáticamente cada meta-carácter de expresiones regulares?

Si hubiera, digamos, una estática.escape() método enjava.util.regex.Pattern, la salida de

Pattern.escape('.')

seria la cuerda"\.", pero

Pattern.escape(',')

solo debe producir",", ya que no es un meta-personaje. Similar,

Pattern.escape('d')

podría producir"\d", ya que'd' se utiliza para denotar dígitos (aunque escapar puede no tener sentido en este caso, ya que'd' podría significar literal'd', lo cual no sería mal interpretado por el intérprete de expresiones regulares como otra cosa, como sería el caso con'.').

Respuestas a la pregunta(6)

Su respuesta a la pregunta