Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2008, 14h28   #1
Membre habitué
 
Homme
Inscription : octobre 2003
Messages : 255
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : octobre 2003
Messages : 255
Points : 103
Points : 103
Par défaut Expression régulière pour balises XML

Bonjour,

je ne maitrise pas totalement les expression reguliere mais je pensais avoir créer celle qui me convenais

je veux toutes les balises :
Code :
1
2
3
4
<page1>aaa</page1>
<page2>aaa</page2>
<page3>aaa</page3>
............
Code :
1
2
3
4
5
6
7
8
 
$pattern = '/<page[0-9]+>.*<\/page[0-9]+>/';
$ok = preg_match_all($pattern, $fichier, $matches, PREG_PATTERN_ORDER);//renvoi 1 si ok
if($ok == 1)
{
   print_r($matches);
 
}
mais il me renvoi un seul element contenant tous dans le tableau et pas les 3.
D4rK_C0uaK6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 17h32   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Vous aussi vous devez indiquer le caractère non-gourmand de l'expression régulière (c'est à dire qu'elle cherche par défaut la correspondance la plus longue). Soit vous spécifier le modificateur U :
Code :
$pattern = '~<page[0-9]+>.*</page[0-9]+>~U';
Soit vous êtes plus strict sur le motif, comme par exemple :
Code :
$pattern = '~<page[0-9]+>[^<]*</page[0-9]+>~';
Soit vous rendez juste un quantifieur précis de l'expression non-gourmand en le succédant de ? :
Code :
$pattern = '~<page[0-9]+>.*?</page[0-9]+>~';
A votre convenance

Attention : ne les cumulez pas, leur effet en serait inversé (le cumul de 1 et 3 : rendra à nouveau la partie de l'expression concernée gourmande).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 17h46   #3
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Je pense que ton xml est mal foutu

J'aurais utilisé un attribut à tes balises page, du genre <page num="1">contenu</page> , ensuite une requête Xpath en se servant du DOM et le tour était joué
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 08h31   #4
Membre habitué
 
Homme
Inscription : octobre 2003
Messages : 255
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : octobre 2003
Messages : 255
Points : 103
Points : 103
Merci pour vos réponses c'est résolu. En fait, je suis en php 4.3.10 et d'après des recherche sur internet le DOM c'est en PHP5.

Je connaissait pas cette notion de gourmandise des expressions. ^^

ps : le xml est ce qu'il est.. mais je suis d'accord avec toi. J'aurais préféré avoir un id.
D4rK_C0uaK6 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h21.


 
 
 
 
Partenaires

Hébergement Web