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:
Le resultat:
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 probleme :
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 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 ?
Partager