String.contains
String.containsbekerja 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.containstidak 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.matchesdengan 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 \bmemeriksa batas kata, sehingga Anda tidak mendapatkan pertandingan untuk restores store products. Perhatikan itu stores 3store_productjuga 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 producttidak akan cocok dengan regex di atas, karena Anda mencari kata storetanpa 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.