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.\\b
\
untuk menentukan satu\
, jadi\\b
akan diartikan sebagai\b
, seperti yang terlihat di RAW regex.\b
cocok dengan batas kata, seperti dijelaskan di atas.matcher.find()
melakukan apa yang Anda butuhkan. Contoh:sumber
Anda cukup menggunakan
matches
metode kelas String.sumber
.*
atau itu hanya akan mencocokkan string yang dimulai denganstores
.Jika Anda ingin memeriksa apakah sebuah string berisi substring atau tidak menggunakan regex, hal terdekat yang dapat Anda lakukan adalah dengan menggunakan find () -
Perhatikan perbedaan antara kecocokan () dan find (), kecocokan () mengembalikan nilai true jika seluruh string cocok dengan pola yang diberikan. find () mencoba menemukan substring yang cocok dengan pola dalam string input tertentu. Juga dengan menggunakan find () Anda tidak perlu menambahkan pencocokan ekstra seperti - (? S). * Di awal dan. * Di akhir pola regex Anda.
sumber
1. hasil: benar
2. hasil: benar
sumber
fromIndex
diabaikan, bukan?contains("something", test, 5) => true