Bonjour,

Je cherche à parser un fichier à l'aide de la classe Scanner en fonction d'une expression régulière.

Mon fichier contient une succession de blocs de la forme:

valeur1COLvaleur2COLvaleurNENDvaleur1COLvaleur2ENDvaleurENDvaleurXCOLvaleurYEND etc....

un bloc peut contenir 0 ou plusieurs fois la chaine valeurCOL et doit se terminer par valeurEND
valeur peut prendre n'importe quel caractère

Je chercher à parser mon document à partir d'une regexp qui représente le pattern décrit plus haut:
Actuellement j'utilise la regex: ((.)+(COL))*((.)+(END))

Je parse mon fichier de la manière suivante:

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
 
// J'initialise le Scanner avec une String pour simplifier
scanner = new Scanner("111COL222COL333END111COL222END111END");
 
final Pattern pattern = Pattern.compile("((.)+(COL))*((.)+(END))");
while (scanner.findInLine(pattern) != null) {
 
	final MatchResult match = scanner.match();
 
	for (int i = 0; i < match.groupCount(); i++) {
		LOGGER.debug("VAL=" + match.group(i));
	}
 
	if (scanner.hasNext(pattern)) {
		String nextLine = scanner.next(pattern);
	} 
}
J'obtiens le résultat :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
RESULT=111COL222COL333END111COL222END111END
RESULT=111COL222COL333END111COL
RESULT=1
RESULT=COL
RESULT=222END111END
RESULT=1
Alors que je souhaite qu'il me détecte 3 blocs distincts sous la forme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
RESULT=111
RESULT=222
RESULT=333
 
RESULT=111
RESULT=222
 
RESULT=111
Quelqu'un peut m'indiquer ce qu'il ne va pas avec mon code ?

Merci