[PHP] recherche de motifs dans une chaîne, regex

recherche de motifs dans une chaîne, regex [PHP] - PHP - Programmation

Marsh Posté le 24-04-2003 à 14:30:48    

bonjour à tous
 
J'ai un petit problème pour récupérer des motifs grâce à une expression régulière :
J'ai en entrée cela <market name="Eurex" location="Allemagne" id="EUR" et je veux récupérer les couples "name,Eurex", "location,Allemagne" etc.
 
Voici mon code actuel :

Code :
  1. $element = '<market name="Eurex" location="Allemagne" id="EUR" />';
  2. $regex = '/^<\w+( \w+="[\w\s\/]*" )*/';
  3. preg_match( $regex, $element, $out );
  4. for ( $i = 0; $i < sizeof( $out ); $i++ )
  5. {
  6.   echo "#".htmlentities( $out[$i] ).'#<br />';
  7. }


 
en sortie, j'obtiens :
#<market name="Eurex" location="Allemagne" id="EUR"#
# id="EUR"#
 
au lieu de
#<market name="Eurex" location="Allemagne" id="EUR"#
# name="Eurex"#
# location="Allemagne"#
# id="EUR"#
 
J'ai essayé avec preg_match_all, ça ne marchait pas mieux, mais de toute façon, cela n'avait pas de sens, la bonne fonction, c'est preg_match tout court.
 
Vous savez ce qui manque pour que mon code récupère également les premiers motifs rencontrés ? (là on dirait qu'à chaque fois qu'il rencontre un motif de la même parenthèse, il écrase l'ancien)


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 24-04-2003 à 14:30:48   

Reply

Marsh Posté le 24-04-2003 à 14:52:57    

bon, alors en fait il faut bien utiliser preg_match_all à un moment donné... mais pas parce que je recherche plusieurs fois le motifs, mais parce que visiblement sur un ( \w*)* il écrase à chaque fois qu'il le trouve la valeur d'avant (car le motif peut arriver plusieurs fois...)
 
Ma solution :

Code :
  1. define( ATT_REG, '\w+' );
  2. define( VAL_REG, '[\w\s\/]*' );
  3. $element = '<market name="Eurex" location="Allemagne" id="EUR" />';
  4. $regex = '/^<\w+( '.ATT_REG.'="'.VAL_REG.'" )*/';
  5. preg_match( $regex, $element, $out );
  6. $regex = '/('.ATT_REG.')="('.VAL_REG.')"/';
  7. preg_match_all( $regex, $out[0], $out );
  8. for ( $i = 0; $i < sizeof( $out[0] ); $i++ )
  9. {
  10.   echo $out[1][$i].':'.$out[2][$i].'<br />';
  11. }


 
me fournit en sortie :
 
name:Eurex
location:Allemagne
id:EUR
 
(donc fallait y aller en 2 temps). Maintenant, si vous avez de meilleurs solutions...


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 24-04-2003 à 16:55:59    

eregi ?  :whistle:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed