The Pattern.quote(String s)semacam melakukan apa yang Anda inginkan. Namun, hal itu menyisakan sedikit yang diinginkan; itu tidak benar-benar melarikan diri dari karakter individu, hanya membungkus string dengan \Q...\E.
Tidak ada metode yang melakukan persis seperti yang Anda cari, tetapi kabar baiknya adalah sebenarnya cukup mudah untuk melepaskan semua karakter khusus dalam ekspresi reguler Java:
regex.replaceAll("[\\W]", "\\\\$0")
Mengapa ini berhasil? Nah, dokumentasi untuk Patternsecara khusus mengatakan bahwa diperbolehkan untuk keluar dari karakter non-alfabet yang tidak harus di-escape:
Ini adalah kesalahan menggunakan garis miring terbalik sebelum karakter alfabet apa pun yang tidak menunjukkan konstruksi yang lolos; ini disediakan untuk ekstensi mendatang pada bahasa ekspresi reguler. Garis miring terbalik dapat digunakan sebelum karakter non-alfabet terlepas dari apakah karakter tersebut merupakan bagian dari konstruksi yang tidak lolos.
Misalnya, ;bukan karakter khusus dalam ekspresi reguler. Namun, jika Anda menghindarinya, Patternmasih akan diartikan \;sebagai ;. Berikut beberapa contoh lainnya:
>menjadi \>yang setara dengan>
[menjadi \[yang merupakan bentuk pelarian dari[
8masih 8.
\)menjadi \\\)yang merupakan bentuk pelolosan dari \dan (digabungkan.
Catatan: Kuncinya adalah definisi "non-alfabet", yang dalam dokumentasi sebenarnya berarti karakter "non- kata ", atau karakter di luar kumpulan karakter [a-zA-Z_0-9].