String.contains
String.contains
bekerja dengan String, titik. Itu tidak berfungsi dengan regex. Ini akan memeriksa apakah String yang ditentukan persis muncul di String saat ini atau tidak.
Perhatikan bahwa String.contains
tidak memeriksa batas kata; itu hanya memeriksa substring.
Solusi Regex
Regex lebih kuat daripada String.contains
, karena Anda dapat menerapkan batasan kata pada kata kunci (antara lain). Ini berarti Anda dapat mencari kata kunci sebagai kata , bukan hanya substring .
Gunakan String.matches
dengan regex berikut:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
Regex RAW (hapus pelolosan yang dilakukan dalam string literal - inilah yang Anda dapatkan saat mencetak string di atas):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
The \b
memeriksa batas kata, sehingga Anda tidak mendapatkan pertandingan untuk restores store products
. Perhatikan itu stores 3store_product
juga ditolak, karena digit dan _
dianggap sebagai bagian dari kata, tapi saya ragu kasus ini muncul dalam teks biasa.
Karena batas kata diperiksa untuk kedua sisi, regex di atas akan mencari kata yang sama persis. Dengan kata lain, stores stores product
tidak akan cocok dengan regex di atas, karena Anda mencari kata store
tanpa s
.
.
biasanya cocok dengan karakter apapun kecuali sejumlah karakter baris baru . (?s)
pada awalnya .
mencocokkan karakter apa pun tanpa kecuali (terima kasih kepada Tim Pietzcker karena telah menunjukkan hal ini).
(?s)
awal regex Anda jika string berisi baris baru.