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 Pattern
secara 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, Pattern
masih akan diartikan \;
sebagai ;
. Berikut beberapa contoh lainnya:
>
menjadi \>
yang setara dengan>
[
menjadi \[
yang merupakan bentuk pelarian dari[
8
masih 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]
.