PERL récupérér dans une chaine de caractere

kepiloco -  
 kepiloco -
Salut

je voulais savoir comment, dans une grosse chaine de caracteres, récupérer certaines infos

par exemples

blablaout1<hhh><gege>blablain1<\gege>blablaout2<hhh><gege>blablain2</gege>blablaout3

récupérer blablain1 et blablain2

je sais que je devrais a tout les coups utiliser les expressions réguliere ... mais comment

:-?

2 réponses

  1. flokocha Messages postés 1519 Statut Membre 281
     
    Ça donnerait quelque chose comme ca il me semble:
    /<gege>.[^<\/gege>]*<\/gege>/gi

    Après il te suffit d'extraire les balises "<gege>" et "</gege>" des chaines qui sortiront.
    0
    1. flokocha Messages postés 1519 Statut Membre 281
       
      Ah non je me suis planté je crois:
      /<gege>.[^<]*<\/gege>/gi
      Ça serait mieux ça, mais il ne faut pas qu'il y ait d'autres balises entre les balises "gege".
      0
  2. Taboujr Messages postés 507 Statut Membre 117
     
    Salut.

    Je pense qu'un truc du genre :
    ($match) = ($chaine =~ /<gege>(.+?)</gege>/g);

    devrait te renvoyer la liste des éléments qui sont à l'intérieur d'une balise gege.
    Le (.+?) signifie "n'importe quel succession de caractère".
    L'expression régulière est encadrée par des /
    Le g à la fin permet de récupérer toutes les occurences si il y en a plusieurs.

    En éspérant que ça t'aide un petit peu... :-)

    .:: TaBou JuNioR ::.
    J'ai des questions à toutes vos réponses. [W. Allen]
    0
    1. flokocha Messages postés 1519 Statut Membre 281
       
      Je crois que le problème avec une expression comme celle-là est que dans le cas de son exemple (blablaout1<hhh><gege>blablain1<\gege>blablaout2<hhh><gege>blablain2</gege>blablaout3 ), cette expression va lui sortir <gege>blablain1<\gege>blablaout2<hhh><gege>blablain2</gege>, au lieu de <gege>blablain1<\gege> et gege>blablain2</gege>.
      0
    2. kepiloco
       
      Slt tlm,
      merci pour vos réponses rapide

      en fait,
      ($match) = ($chaine =~ /<gege>(.+?)</gege>/g);

      me donne une erreur
      near "/(.+?)


      sinon je ne comprend pas trop, vu qu'il y a plusieurs occurences, il faudrais plutot le mettre dans un tableau non? ->

      my $i;
      my @match=();
      my $chaine=... ;
      (@match) = ($chaine =~ /
      (.+?)
      /g);
      for ($i=0; $i < @match; $i++)
      {
      print $match[$i];
      }


      En gros, faudrais récupérer uniquement lintérieur de ce qu'il y a entre les tags <gege> et </gege>
      0
    3. kepiloco
       
      Bien vu Taboujr !!!!

      Je suis trop stupide !! :(

      javais pas vu ton expression réguliere ;-)

      voici ce que que jai fais

      my $i;
      my @match=();
      my $chaine=... ;
      (@match) = ($chaine =~ /(.+?)/g);
      for ($i=0; $i < @match; $i++)
      {
         $match[$i]=~ s/<gege>//g;
         $match[$i]=~ s/<\/gege>//g;
          print $match[$i]."<br>";
      }
      



      Merci a vous 2 !
      0