la méthode matches() pratique une mise en correspondance sur la chaîne de caractères cible complète. C'est à dire que l'expression régulière doit s'appliquer à la chaîne de caractères entière, au contraire des méthodes find() et lookingAt(). De même que la méthode lookingAt(), la recherche commence toujours au début de l'entrée.
Pattern modele = Pattern.compile("a.c"); Matcher recherche = modele.matcher("abcxxxabcxxxabcxxx"); if(recherche.matches()){ //Cette recherche échoue toujours... //Le modèle ne correspond pas à l'entrée entière } Pattern modele = Pattern.compile("a.c\\w*"); Matcher recherche = modele.matcher("abcxxxabcxxxabcxxx"); if(recherche.matches()){ System.out.println("Le modèle correspond effectivement à l'entrée."); }
Au contraire de la méthode find(), il ne faut pas utiliser la méthode matches() comme condition d'une boucle, car une itération infinie s'exécuterait puisque le résultat de la recherche sur une même séquence d'entrée sera toujours le même. Evidemment, si le résultat est false, la boucle ne démarre pas.
Exemple [voir]Pattern modele = Pattern.compile("^a\\w*$", Pattern.MULTILINE); Matcher recherche = modele.matcher("abcxxxabcxxxabcxxx"); while(recherche.matches()){ //Boucle infinie... }
import java.util.regex.Matcher; import java.util.regex.Pattern; public class MiseEnCorrespondance { public static void main(String[] args) { Pattern modele = Pattern.compile("a.c"); Matcher recherche = modele.matcher("abcxxxabcxxxabcxxx"); recherche(recherche); recherche.reset(); recherche.usePattern(Pattern.compile("^a.c.*$", Pattern.MULTILINE)); recherche(recherche); } public static void recherche(Matcher recherche) { String regexp = recherche.pattern().pattern(); if(recherche.matches()){ System.out.println("Une occurrence a été trouvée entre " + recherche.regionStart() + " et " + recherche.regionEnd()); String chaine = recherche.group(); int debut = recherche.start(); int fin = recherche.end(); System.out.println("Modèle : " + regexp); System.out.println("Occurrence : " + chaine); System.out.println("Début : " + debut); System.out.println("Fin : " + fin + "\n"); } else { System.out.println("Aucune correspondance n'a pu être " + "trouvée pour l'expression " + regexp + "\n"); } } } |