Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
925 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  ordre dans les expressions régulières

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ordre dans les expressions régulières

n°1134753
unknown_21
Posté le 29-06-2005 à 14:49:36  profilanswer
 

Bonjour,
j'ai un pb avec les expressions régulières. J'utilise des OR.
J'ai une phrase de ce type:

Code :
  1. contenu =" #aaaaaa# a1 ##aaaaaa## fonctionne #bbbbbb# b1 ##bbbbbb## et #aaaaaa# a2 ##aaaaaa## role dans #cccccc# c1 ##cccccc##";


Je souhaite récupérer:

Code :
  1. a1 fonctionne b1
  2. a2 role dans c1


Voici le code:

Code :
  1. String total="";
  2. Pattern regex = Pattern.compile("(#aaaaaa#(.*?)##aaaaaa##(.*?)#cccccc#(.*?)##cccccc##)|"+"(#aaaaaa#(.*?)##aaaaaa##(.*?)#bbbbbb#(.*?)##bbbbbb##)" );
  3. Matcher match_tout = regex.matcher(contenu);
  4. while(match_tout.find()){     
  5.          
  6.    if (match_tout.group(1) != null){
  7.       total += match_tout.group(2)+match_tout.group(3)+match_tout.group(4)+"<br>";
  8.       System.out.println("match 2 = "+match_tout.group(2));
  9.       System.out.println("match 3 = "+match_tout.group(3));
  10.       System.out.println("match 4 = "+match_tout.group(4));
  11.    }
  12.    else
  13.    if (match_tout.group(5) != null){
  14.       total += match_tout.group(6)+match_tout.group(7)+match_tout.group(8)+"<br>";
  15.       System.out.println("match 6 = "+match_tout.group(6));
  16.       System.out.println("match 7 = "+match_tout.group(7));
  17.       System.out.println("match 8 = "+match_tout.group(8));
  18.    }
  19. }


donc l'ordre est :
ordre contenu : a b a c
ordre regex : a c a b  
et j'obtiens:

Code :
  1. match 2 =  a1
  2. match 3 =  fonctionne #bbbbbb# b1 ##bbbbbb## et #aaaaaa# a2 ##aaaaaa## role dans
  3. match 4 =  c1


 
Si je fais:

Code :
  1. contenu =" #aaaaaa# a1 ##aaaaaa## fonctionne #bbbbbb# b1 ##bbbbbb## et #aaaaaa# a2 ##aaaaaa## role dans #cccccc# c1 ##cccccc##";
  2. String total="";
  3. Pattern regex_tout = Pattern.compile("(#aaaaaa#(.*?)##aaaaaa##(.*?)#bbbbbb#(.*?)##bbbbbb##)|"+"(#aaaaaa#(.*?)##aaaaaa##(.*?)#cccccc#(.*?)##cccccc##)" );
  4. Matcher match_tout = regex_tout.matcher(contenu);
  5. while(match_tout.find()){     
  6.          
  7.    if (match_tout.group(1) != null){
  8.       total += match_tout.group(2)+match_tout.group(3)+match_tout.group(4)+"<br>";
  9.       System.out.println("match 2 = "+match_tout.group(2));
  10.       System.out.println("match 3 = "+match_tout.group(3));
  11.       System.out.println("match 4 = "+match_tout.group(4));
  12.    }
  13.    else
  14.    if (match_tout.group(5) != null){
  15.       total += match_tout.group(6)+match_tout.group(7)+match_tout.group(8)+"<br>";
  16.       System.out.println("match 6 = "+match_tout.group(6));
  17.       System.out.println("match 7 = "+match_tout.group(7));
  18.       System.out.println("match 8 = "+match_tout.group(8));
  19.    }
  20. }


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 :
  1. match 2 =  a1
  2. match 3 =  fonctionne
  3. match 4 =  b1
  4. match 6 =  a2
  5. match 7 =  role dans
  6. 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
 

mood
Publicité
Posté le 29-06-2005 à 14:49:36  profilanswer
 

n°1134819
Rits75
to?be:!be
Posté le 29-06-2005 à 15:48:32  profilanswer
 

ameliorer ta regex!
 
au lieu d'ecrire en dur #aaaaaa# plutot un truk du genre #*#

n°1134868
the real m​oins moins
Posté le 29-06-2005 à 16:09:05  profilanswer
 

C'est quoi qui a motivé ton choix d'utiliser des regex, dans ce cas?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1134934
unknown_21
Posté le 29-06-2005 à 16:35:43  profilanswer
 

slt,
merci d'avoir répondu. Je ne peux pas utiliser ta solution rits75 car si je fais comme ça, je ne peux pas différencier ce que je récupère. Or, selon les balises #, le traitement (non ecrit ici) est différent.
et the real--, en fait c pas moi qui est choisi d'utiliser les regex mais on me l'a demandé.
bon sinon, le code suivant répond à mon pb (je précise, ce n'est pas moi qui ai trouvé...)

Code :
  1. Pattern regex= Pattern.compile("(#aaaaaa#([^#]*?)##aaaaaa##([^#]*?)#cccccc#([^#]*?)##cccccc##)|"+"(#aaaaaa#([^#]*?)##aaaaaa##([^#]*?)#bbbbbb#([^#]*?)##bbbbbb##)" );


Merci quand meme
a+

n°1134992
the real m​oins moins
Posté le 29-06-2005 à 17:09:48  profilanswer
 

(que ce soit toi ou pas qui l'ait choisi, je m'en fous un peu, je suis juste curieux de savoir pourquoi ce choix... à moins que ça soit interdit de remettre en question les choses qu'on t'impose, chez toi ?)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1135045
unknown_21
Posté le 29-06-2005 à 18:03:22  profilanswer
 

le but du programme que je dois faire est de récupérer à partir d'un texte, des segments de phrases qui sont balisés (avec #). Pour chaque type de balises, je dois faire un certain traitement. On m'a donc dit de le faire avec des regex. Je sais pas si c'est le mieux. J'avais essayé autre chose : parcourir le texte et à chaque mot qui equals mes balises, récupérer les segments.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  ordre dans les expressions régulières

 

Sujets relatifs
[Visual C++] Expressions régulières[VBS] [WORD] Expressions régulières - Rechercher toutes les lignes...
PHP et expression regulières HELP !Ordre de superposition des calques (DIV)
ordre des balises "title" et "charset" dans le "head"expressions regex ???
Aide Expressions Régulières (Urgent) 
Plus de sujets relatifs à : ordre dans les expressions régulières


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR