String.contains
String.contains
funziona con String, punto. Non funziona con regex. Controllerà se la stringa esatta specificata appare o meno nella stringa corrente.
Notare che String.contains
non controlla il confine di parola; controlla semplicemente la sottostringa.
Soluzione Regex
Regex è più potente di String.contains
, poiché puoi applicare il confine di parola alle parole chiave (tra le altre cose). Ciò significa che puoi cercare le parole chiave come parole , anziché solo sottostringhe .
Utilizzare String.matches
con la seguente regex:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
La regex RAW (rimuovi l'escape fatto in stringa letterale: questo è ciò che ottieni quando stampi la stringa sopra):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
I \b
controlli per confine di parola, in modo che non si ottiene una corrispondenza per restores store products
. Nota che stores 3store_product
è anche rifiutato, poiché digit e _
sono considerati parte di una parola, ma dubito che questo caso appaia nel testo naturale.
Poiché il confine della parola è controllato per entrambi i lati, la regex sopra cercherà le parole esatte. In altre parole, stores stores product
non corrisponderà alla regex sopra, poiché stai cercando la parola store
senza s
.
.
normalmente corrisponde a qualsiasi carattere tranne un numero di caratteri di nuova riga . (?s)
all'inizio fa .
corrispondenze qualsiasi personaggio senza eccezioni (grazie a Tim Pietzcker per averlo fatto notare).
(?s)
all'inizio della tua regex nel caso in cui la stringa contenga nuove righe.