Expression reguliere : formaliser ()*

cs_aekold Messages postés 4 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 5 janvier 2006 - 5 janv. 2006 à 00:36
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 5 janv. 2006 à 09:52
Bonjour les phpseniens,

je reste bloqué sur probleme dont je ne comprend pas la raison. Je vous explique a travers un exemple mon souci:
objectif : récuperer le contenu des <> entre "debut" et "fin" sans en connaitre le nombre exacte
texte a étudier:"debut<mot1>truc<mot2>tructruc<mot3>fin"
motif (que je pensais fonctionner): /debut(?:.*<(.*)>)*.*fin/U
apparemment la notion de ()* ne marche pas.

Si l'un de vous a déja rencontré cette difficultée et en connait la solution peut-il m'aider svp?
P.S: celui-ci est utilisé avec preg_match()

Merci de votre aide.
Aekold,

4 réponses

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
5 janv. 2006 à 00:45
salut...



Les expressions régulières, quel casse tête !



Moi, ton truc, je le ferais comme ça :





$texte = "debut<mot1>truc<mot2>tructruc<mot3>fin";



// astuce

preg_match('@debut(.*)fin@im', $texte, $res) or die('pouet');



// le truc

preg_match_all('@<([^>]*)>@im', $res[1], $mots);







bon, je sais, c'est un peu laid, mais vu l'heure ;)
0
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
5 janv. 2006 à 02:33
Salut, je pose une petite question ici puisque le sujet s'y réfère et pour éviter de flooder sur le forum : comment crait-on des motifs comme ceux-ci ? Je connais leur utilisté, mais comment détermine-t-on leurs contenus ?


----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
5 janv. 2006 à 02:51
WhiteDarf =>



C'est assez compliqué en primière approche... En plus la doc de
fr.php.net si-rapportant est relativement mal faite, comparée au reste
du site.



Pour aborder les RegExp, il faut une bonne de courage. Et surtout y aller molo au début. Elles viendront petit à petit...



L'essentiel :

() <= se qu'il capturer dedans

\w <= tout les caractères (sauf accentués)

\W <= l'inverse

\s <= les blancs ( espace, saut de ligne...)

\S <= inverse

\d <= chifre

\D

. <= n'importe quoi

\. <= un point



? : 1 ou 0

+ : 1 ou plus

* : 0 ou plus

{n,m} : n à m fois



| : ou logique



[] <= classe de caractère ([a-z] = lettre minuscule, ["'] = les guillemets, ..., [^a-z] = pas lettre minuscule, ...)





Et ce n'est que la base de la base... Bref, bonne chance !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
5 janv. 2006 à 09:52
Hello,

www.expreg.com, site de référence, français :-)
0
Rejoignez-nous