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:
J'obtiens le résultat :
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); } }
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 RESULT=111COL222COL333END111COL222END111END RESULT=111COL222COL333END111COL RESULT=1 RESULT=COL RESULT=222END111END RESULT=1
Quelqu'un peut m'indiquer ce qu'il ne va pas avec mon code ?
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
Merci
Partager