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 ?