Bonjour,
j'ai un pb avec les expressions régulières. J'utilise des OR.
J'ai une phrase de ce type:
Code :
- contenu =" #aaaaaa# a1 ##aaaaaa## fonctionne #bbbbbb# b1 ##bbbbbb## et #aaaaaa# a2 ##aaaaaa## role dans #cccccc# c1 ##cccccc##";
|
Je souhaite récupérer:
Code :
- a1 fonctionne b1
- a2 role dans c1
|
Voici le code:
Code :
- String total="";
- Pattern regex = Pattern.compile("(#aaaaaa#(.*?)##aaaaaa##(.*?)#cccccc#(.*?)##cccccc##)|"+"(#aaaaaa#(.*?)##aaaaaa##(.*?)#bbbbbb#(.*?)##bbbbbb##)" );
- Matcher match_tout = regex.matcher(contenu);
- while(match_tout.find()){
-
- if (match_tout.group(1) != null){
- total += match_tout.group(2)+match_tout.group(3)+match_tout.group(4)+"<br>";
- System.out.println("match 2 = "+match_tout.group(2));
- System.out.println("match 3 = "+match_tout.group(3));
- System.out.println("match 4 = "+match_tout.group(4));
- }
- else
- if (match_tout.group(5) != null){
- total += match_tout.group(6)+match_tout.group(7)+match_tout.group(8)+"<br>";
- System.out.println("match 6 = "+match_tout.group(6));
- System.out.println("match 7 = "+match_tout.group(7));
- System.out.println("match 8 = "+match_tout.group(8));
- }
- }
|
donc l'ordre est :
ordre contenu : a b a c
ordre regex : a c a b
et j'obtiens:
Code :
- match 2 = a1
- match 3 = fonctionne #bbbbbb# b1 ##bbbbbb## et #aaaaaa# a2 ##aaaaaa## role dans
- match 4 = c1
|
Si je fais:
Code :
- contenu =" #aaaaaa# a1 ##aaaaaa## fonctionne #bbbbbb# b1 ##bbbbbb## et #aaaaaa# a2 ##aaaaaa## role dans #cccccc# c1 ##cccccc##";
- String total="";
- Pattern regex_tout = Pattern.compile("(#aaaaaa#(.*?)##aaaaaa##(.*?)#bbbbbb#(.*?)##bbbbbb##)|"+"(#aaaaaa#(.*?)##aaaaaa##(.*?)#cccccc#(.*?)##cccccc##)" );
- Matcher match_tout = regex_tout.matcher(contenu);
- while(match_tout.find()){
-
- if (match_tout.group(1) != null){
- total += match_tout.group(2)+match_tout.group(3)+match_tout.group(4)+"<br>";
- System.out.println("match 2 = "+match_tout.group(2));
- System.out.println("match 3 = "+match_tout.group(3));
- System.out.println("match 4 = "+match_tout.group(4));
- }
- else
- if (match_tout.group(5) != null){
- total += match_tout.group(6)+match_tout.group(7)+match_tout.group(8)+"<br>";
- System.out.println("match 6 = "+match_tout.group(6));
- System.out.println("match 7 = "+match_tout.group(7));
- System.out.println("match 8 = "+match_tout.group(8));
- }
- }
|
donc ici, l'ordre est :
ordre contenu : a b a c
ordre regex : a b a c
j'obtiens ce qu'il faut cad:
Code :
- match 2 = a1
- match 3 = fonctionne
- match 4 = b1
- match 6 = a2
- match 7 = role dans
- match 8 = c1
|
Le probleme c'est que je ne connais pas à l'avance l'ordre de mes balises #...# dans la string contenu. Donc comment faire ?
Merci