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 23/02/2007, 14h31   #1
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
Par défaut Regexp portée minimale

J'ai un soucis avec la portée d'une regexp à choix multiples. Je sais pas si j'utilise les bons termes rien ne vaut un exemple:

preg_match_all("/(.|\n)*MOTIF1[^\\n]*[\\n]*((.|\n)*)(MOTIF3|MOTIF4)(.|\n)*/i", $fiche, $matches);


J'ai un texte :


MOTIF1
blabla

blabal

MOTIF2
blabla
MOTIF3
blala


J'aimerai récupérer la partie entre motif1 et motif2, et si motif2 est absent entre motif1 et motif3. Bref il s'agit de demander à preg_match de matcher l'ensemble le plus petit possible.
Joker-eph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 16h50   #2
Membre éprouvé
 
Avatar de goodpz
 
Inscription : février 2007
Messages : 475
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 475
Points : 474
Points : 474
Code :
1
2
preg_match('/MOTIF1((?:\r?\n)*?)(.*)(?1)MOTIF[23]/Us', $fiche, $matches);
print_r($matches[2]);
Je me suis permis d'enlever les éventuels retours à la ligne après et juste avant les MOTIF (c'est ce que j'ai cru comprendre en lisant ton pattern)
goodpz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 16h53   #3
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Oserais-je émettre l'avis que tant qu'à faire des regex Perl, autant s'habituer avec la vraie syntaxe.
C'est à dire que l'on peut très bien se passer de l'option 'U', qui n'existe pas en Perl, en utilisant le modificateur de quantificateur '?'
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 17h00   #4
Membre éprouvé
 
Avatar de goodpz
 
Inscription : février 2007
Messages : 475
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 475
Points : 474
Points : 474
Citation:
Oserais-je émettre l'avis
Vous pouvez Monsieur ; )
goodpz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 17h12   #5
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Et puisqu'on m'y autorise, j'argumenterai par le fait que l'utilisation des modificateurs de quantification permet plus de flexibilité : une partie du motif peut être "greedy" et une autre "ungreedy". Trop fort !
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2007, 14h18   #6
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
Merci !
J'ai appris un nouveau truc du coup (greedy/ungreedy).

Il y a quand même un truc que je n'ai pas trouvé, c'est la signification de "(?1)" ?
Joker-eph 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 18h21.


 
 
 
 
Partenaires

Hébergement Web