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:
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:
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 ?