String.contains
String.contains
fonctionne avec String, point final. Cela ne fonctionne pas avec regex. Il vérifiera si la chaîne exacte spécifiée apparaît ou non dans la chaîne actuelle.
Notez que String.contains
cela ne vérifie pas la limite du mot; il vérifie simplement la sous-chaîne.
Solution regex
Regex est plus puissant que String.contains
, puisque vous pouvez appliquer une limite de mot sur les mots-clés (entre autres). Cela signifie que vous pouvez rechercher les mots-clés sous forme de mots , plutôt que de simples sous - chaînes .
À utiliser String.matches
avec l'expression rationnelle suivante:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
Le regex RAW (supprimez l'échappement effectué dans la chaîne littérale - c'est ce que vous obtenez lorsque vous imprimez la chaîne ci-dessus):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
Les \b
vérifications de la limite du mot, de sorte que vous n'obteniez pas de correspondance restores store products
. Notez que stores 3store_product
c'est également rejeté, car digit et _
sont considérés comme faisant partie d'un mot, mais je doute que ce cas apparaisse dans le texte naturel.
Puisque la limite de mot est vérifiée pour les deux côtés, l'expression régulière ci-dessus recherchera des mots exacts. En d'autres termes, stores stores product
ne correspondra pas à l'expression régulière ci-dessus, car vous recherchez le mot store
sans s
.
.
correspond normalement à n'importe quel caractère sauf un certain nombre de caractères de nouvelle ligne . (?s)
au début fait des .
correspondances avec n'importe quel caractère sans exception (merci à Tim Pietzcker pour l'avoir signalé).
(?s)
au début de votre expression régulière au cas où la chaîne contiendrait des sauts de ligne.