O Pattern.quote(String s)tipo de faz o que você quer. No entanto, deixa um pouco a desejar; na verdade não escapa os caracteres individuais, apenas envolve a string com \Q...\E.
Não existe um método que faça exatamente o que você está procurando, mas a boa notícia é que é bastante simples escapar de todos os caracteres especiais em uma expressão regular Java:
regex.replaceAll("[\\W]", "\\\\$0")
Por que isso funciona? Bem, a documentação para Patterndiz especificamente que é permitido escapar caracteres não alfabéticos que não necessariamente precisam ser escapados:
É um erro usar uma barra invertida antes de qualquer caractere alfabético que não denota uma construção de escape; eles são reservados para futuras extensões da linguagem de expressão regular. Uma barra invertida pode ser usada antes de um caractere não alfabético, independentemente de esse caractere ser parte de uma construção sem escape.
Por exemplo, ;não é um caractere especial em uma expressão regular. No entanto, se você escapar, Patternainda interpretará \;como ;. Aqui estão mais alguns exemplos:
>torna-se o \>que é equivalente a>
[torna-se o \[que é a forma escapada de[
8está parado 8.
\)torna-se \\\)qual é as formas escapadas \e (concatenadas.
Observação: a chave é a definição de "não alfabético", que na documentação realmente significa caracteres "não palavra " ou caracteres fora do conjunto de caracteres[a-zA-Z_0-9] .