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

Fermé
kepiloco - 4 mai 2004 à 10:24
 kepiloco - 4 mai 2004 à 11:55
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

:-?
A voir également:

2 réponses

flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
4 mai 2004 à 11:01
Ç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
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
4 mai 2004 à 11:16
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
Taboujr Messages postés 507 Date d'inscription vendredi 18 janvier 2002 Statut Membre Dernière intervention 2 janvier 2008 117
4 mai 2004 à 11:07
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
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
4 mai 2004 à 11:13
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
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
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