Вибір Pattern.quote(String s)робить те, що ви хочете. Однак це залишає небагато бажати; насправді це не уникає окремих символів, просто загортає рядок \Q...\E.
Не існує методу, який би робив саме те, що ви шукаєте, але гарна новина полягає в тому, що врятуватись від усіх спеціальних символів у регулярному виразі Java досить просто:
regex.replaceAll("[\\W]", "\\\\$0")
Чому це працює? Ну а документація Patternспеціально говорить про те, що допустимо уникати не алфавітних символів, які не обов'язково уникати:
Помилка використання зворотної косої риски перед будь-яким алфавітним символом, який не позначає уникнуту конструкцію; вони зарезервовані для подальшого розширення до мови регулярних виразів. Зворотна косою рисою може бути використана перед символом, що не буває алфавітом, незалежно від того, що цей символ є частиною немальованої конструкції.
Наприклад, ;не є особливим символом у регулярному виразі. Однак, якщо уникнути цього, Patternвсе одно буде тлумачити \;як ;. Ось ще кілька прикладів:
>стає тим, \>що еквівалентно>
[стає, \[що є втеченою формою[
8є досі 8.
\)стає тим, \\\)що є втікаючими формами \і (об'єднаними.
Примітка: Ключ є визначенням «неалфавітних», що в документації на самому ділі означає «не- слово » символи або символи поза набору символів [a-zA-Z_0-9].