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

Langage Java Discussion :

Captures multiples dans une regexp


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut Captures multiples dans une regexp
    Bonjour,

    Mon probleme est relativement simple mais ce sera plus simple en entrant directement dans le vif du sujet.
    Je dois lire une chaine composée de pattern repetés (ici: AAxBByAAxxBByyAAxxxBByyy), et la matcher avec une regexp.

    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Pattern pattern = Pattern.compile("(?:(A+)(x+)(B+)(y+)){3}");
    Matcher matcher = pattern.matcher("AAxBByAAxxBByyAAxxxBByyy");
    if (matcher.matches()) {
    	for (int i = 1; i <= matcher.groupCount(); i++)
    		if (i > 1)
    			System.out.print("\n" + i + "\t" + matcher.group(i));
    		else System.out.print(i + "\t" + matcher.group(i));
    	System.out.println();
    }
    Le resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Le resultat :
    1	AA
    2	xxx
    3	BB
    4	yyy
    Le probleme :
    Le pattern est correct etant donné qu'il match, cependant il n'affiche que le dernier match du groupe {3}.
    Il match donc correctement les 3 mais n'en capture qu'une ... L'exemple a bien sur été simplifié a l'extreme et les 3 captures sont evidemment necessaires.
    un + à la place du {3} ne change malheureusement rien du tout.

    Il semblerait que ce soit le comportement attendu ... Mais de fait quel est le moyen de capturer les trois sous-chaines ?

  2. #2
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut
    Résolu ... Désolé pour le dérangement, je le laisse au cas ou ça puisse servir à quelqu'un d'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Pattern pattern = Pattern.compile("(A+)(x+)(B+)(y+)");
     
    int position = 0;
    while (matcher.find(position)) {
    	for (int i = 1; i <= matcher.groupCount(); i++)
    		if (i > 1)
    			System.out.print("\n" + i + "\t" + matcher.group(i));
    		else System.out.print(i + "\t" + matcher.group(i));
    	System.out.println();
    	position = matcher.end();
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Clé multiple dans une table
    Par iutcien dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 31/05/2006, 14h45
  2. Réponses: 8
    Dernier message: 03/02/2006, 15h15
  3. update multiple dans une meme colonne
    Par debdev dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/01/2006, 21h46
  4. [Débutant] Sélection multiples dans une Listbox
    Par eraim dans le forum Access
    Réponses: 4
    Dernier message: 15/10/2005, 03h21
  5. Enregistre résulat multiplication dans une table
    Par faranfasi dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h04

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