Besoin d'aide sur une regex
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:
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:
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:
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