Expressions Régulières

Résolu
neurosupherot Messages postés 81 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 7 novembre 2007 - 27 avril 2007 à 12:44
neurosupherot Messages postés 81 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 7 novembre 2007 - 9 août 2007 à 23:54
Bonjour, il s'agirait de s'ammuser avec les expressions régulières


j'ai un petit souci.

j'ai fait mon propre bbcode, et tout semble fonctionner, sauf:


lorsque je mets un truc comme


ezrezr[color=#00FF00]ffzezzeffsf/color


au lieu de me mettre ezrezrffzezzeffsf, il me met: ezrezrffzezzeffsf.


la raison est simple, j'utitilise le masque '/\[color=#[0-9A-F]){6}\](.*)\[\/color\]/'.

en effet, il va entourer avec les balises de couleur tout ce qu'il y a entre la balise bb ouvrante et la balise bb fermante.


ma question est: comment peut on faire pour qu'il fasse une détection
"récursive", c'est à dire que s'il trouve un autre color ouvrant à
l'intérieur du premier et il cherche le fermant correspondant.


en gros, un texterougetexteverttexterouge


on m'a compris?


merci!

1 réponse

neurosupherot Messages postés 81 Date d'inscription jeudi 7 août 2003 Statut Membre Dernière intervention 7 novembre 2007
9 août 2007 à 23:54
Pour ceux que ça intéresse, j'ai trouvé la solution à ma question.

j'ai trouvé deux methodes efficaces.
soit une que j'ai bricolé avec un preg_match_all::

$regex = '@\){6}\]((?:[^[]|\[(?!(color=#[0-9A-F]){6}|color)])|(?R))+)@';
      $HasMatches=preg_match_all($regex,$Str,$Matches,PREG_OFFSET_CAPTURE|PREG_SET_ORDER);
        while($HasMatches)
        {
            ............... ..................$HasMatches=preg_match_all($regex,$TotalStr,$this->PregMatches,PREG_OFFSET_CAPTURE|PREG_SET_ORDER);
        }

soit une autre avec preg_replace_callback, que j'ai trouvé sur php.net voir preg_replace_callback , mais l'expression rationnelle est légèrement !=
3
Rejoignez-nous