Comment utiliser les regex en Chaîne.méthode contains() en Java
Je veux vérifier si une Chaîne contient les mots "magasins", "banque" et "produit" dans cet ordre. Peu importe ce qui est entre eux.
J'ai essayé d'utiliser someString.contains(stores%store%product);
et aussi .contains("stores%store%product");
Dois-je déclarer explicitement un regex et le passer sur la méthode ou je ne peux pas passer une regex à tous?
Vous devez vous connecter pour publier un commentaire.
Chaîne.contient
String.contains
fonctionne avec de la Ficelle, de la période. Il ne fonctionne pas avec les regex. Elle permet de vérifier si la Chaîne de caractères spécifiée apparaissent dans le courant de String ou pas.Noter que
String.contains
ne vérifie pas la limite de mot; il vérifie simplement pour la sous-chaîne.Regex solution
Regex est plus puissant que
String.contains
, puisque vous pouvez appliquer la limite de mot sur les mots-clés (entre autres choses). Cela signifie que vous pouvez rechercher des mots-clés comme mots, plutôt que de simplement sous-chaînes.Utilisation
String.matches
avec la regex suivante:Les PREMIÈRES regex (suppression de l'échappement dans littéral de chaîne - c'est ce que vous obtenez lorsque vous imprimez la chaîne ci-dessus):
La
\b
vérifie la limite de mot, de sorte que vous n'obtenez pas de match pourrestores store products
. Notez questores 3store_product
est également rejeté, puisque les chiffres et_
sont considérées comme une partie d'un mot, mais je doute que ce cas apparaissent dans le texte naturel.Depuis frontière de mot est vérifiée pour les deux parties, l'expression régulière ci-dessus sera à la recherche pour les mots exacts. En d'autres termes,
stores stores product
ne correspondent pas à l'expression régulière ci-dessus, puisque vous êtes à la recherche pour le motstore
sanss
..
normalement correspondre à n'importe quel caractère sauf un certain nombre de caractères de nouvelle ligne.(?s)
au début fait.
correspond à tout caractère sans exception (merci à Tim Pietzcker pour le signaler).(?s)
le début de votre regex dans le cas où la chaîne contient des retours à la ligne.\\b
\
pour spécifier un seul\
, donc\\b
sera interprété comme\b
, comme on le voit dans les PREMIÈRES regex.\b
matchs de limite de mot, comme expliqué ci-dessus.matcher.find()
fait ce dont vous avez besoin. Exemple:Vous pouvez simplement utiliser
matches
méthode de la classe String..*
ou il va seulement correspondre les chaînes commençant parstores
.1.résultat: true
2.résultat: true
fromIndex
est ignoré, n'est-ce pas?contains("something", test, 5) => true
Si vous voulez vérifier si une chaîne contient des sous-chaîne ou non à l'aide de regex, le plus proche que vous pouvez faire est d'utiliser find() -
Noter la différence entre les matchs() et find(), correspondances() retourne true si l'ensemble de la chaîne correspond au modèle donné. find() essaie de trouver une chaîne qui correspond au modèle dans une chaîne d'entrée. Aussi en utilisant find() vous n'avez pas à ajouter de la correspondance comme - (?s).* au début et à la .* à la fin de votre regex modèle.