IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Regex & Matcher


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 61
    Par défaut Regex & Matcher
    Bonjour,
    J'ai un petit souci avec la méthode Regex de java.
    En fait, je veux chercher des matchs de ce pattern "[a-z]+/NN [a-z]+/NN" sur ce texte : test/NN process/NN faults/NN

    Il doit me trouver : "test/NN process/NN" et "process/NN faults/NN"

    Mais en appliquant le matcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Matcher mtch = ptrn.matcher(texte);
    while(mtch.find()){
    	System.out.println("match = " + mtch.group());
    }
    Il me rend seulement "test/NN process/NN" et il s'en fiche de "process/NN faults/NN".
    Je sais que c'est à cause du fait que le début de deuxième match se trouve dans le match précédent : "process/NN".

    Mais je me demande s'il y a une solution pour pouvoir trouver ce genre de matchs? (a part des techniques de tokenizing, je préfère le Regex )

    Marci à tous
    Hassan

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux utiliser les groupes dans ton pattern afin de pouvoir récupérer facilement les deux séquences de ton pattern :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern ptrn = Pattern.compile("([a-z]+/NN) ([a-z]+/NN)");
    Grâce à cela tu peux utiliser les méthodes group()/start()/end() pour récupérer la chaine concerné et l'index de début/fin.

    Ensuite il suffit d'utiliser forcer l'index de début de la recherche avec find(int), en le positionnant au début du second groupe lorsqu'on trouve un élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	String texte = "test/NN process/NN faults/NN";
     
    	Pattern ptrn = Pattern.compile("([a-z]+/NN) ([a-z]+/NN)");
    	Matcher mtch = ptrn.matcher(texte);
     
    	// On commence la recherche au tout début de la chaine :
    	int start = 0;
    	while(mtch.find(start)){
    		// group() renvoi toute la chaine trouvé
    		// group(1) renvoit le premier groupe
    		// group(2) renvoit le second groupe
    		System.out.println("match = " + mtch.group());
     
    		// On récupère l'index de début du second groupe
    		// pour continuer la recherche à partir de là :
    		start = mtch.start(2);
    	}
    a++

Discussions similaires

  1. REGEX Matcher un mot s'il n'appartient pas à une liste donnée
    Par bijnok dans le forum Général Java
    Réponses: 4
    Dernier message: 17/03/2011, 12h00
  2. [Regex] Matcher la répétition de caractères
    Par Shuret dans le forum Général Java
    Réponses: 4
    Dernier message: 17/02/2009, 19h47
  3. Probleme regex Matcher
    Par Samildanach dans le forum Langage
    Réponses: 1
    Dernier message: 07/11/2008, 13h34
  4. [Regex perl] Matcher un gros fichier
    Par osoumayaj dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 18/01/2007, 09h37
  5. [jakarta][regex]Matcher mot en entier.
    Par thibaut dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 26/05/2004, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo