Expression rationnelles et ordre de parcours

Expression rationnelles et ordre de parcours - PHP - Programmation

Marsh Posté le 16-11-2008 à 19:08:16    

Bonjour,
 
je chercher à controler l'ordre dans lequel un preg_replace gourmand va effectuer ses changements.
 
Prenons l'exemple suivant :
 
Texte à filtrer :
<coucou><salut></coucou></salut></coucou><coucou>flop</coucou>
 
 
Ce qu'on cherche à obtenir c'est :
<coucou2><salut></coucou></salut></coucou2><coucou2>flop</coucou2>
 
C'est à dire que l'on veut remplacer les motifs de type <coucou>(.*)</coucou> par <coucou2>$1</coucou2> avec un preg_replace dans l'ordre de parenthésage.
C'est a dire que le premier motif remplacé sera :
<coucou><salut></coucou></salut></coucou><coucou>flop</coucou>
ce qui donnera la chaine :
<coucou2><salut></coucou></salut></coucou2><coucou>flop</coucou>
puis le second motif remplacé sera :
<coucou2><salut></coucou></salut></coucou2><coucou>flop</coucou>
Pour donner enfin la chaine voulu :
<coucou2><salut></coucou></salut></coucou2><coucou2>flop</coucou2>
 
Je ne sais pas si j'ai été clair, mais j'espère qe quelqu'un connait la méthode pour effectuer les remplacements dans cet ordre la ( c'est le même ordre qu'on suivrait si on parcourait les ensembles parenthésés en donnant la priorité aux ensembles parenthésés les plus large).
 

Reply

Marsh Posté le 16-11-2008 à 19:08:16   

Reply

Marsh Posté le 17-11-2008 à 09:30:10    

[:pingouino]  
 
Tu pourrais déjà expliquer pourquoi ton premier </coucou> devrait être complètement ignoré ? [:pingouino]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 18-11-2008 à 15:00:21    

Si vous voulez ...  bien que je pense pas que ce soit utile :)
 
En fait je fais un parseur pour un langage de type BB.
J'aimerais rajouter une balise de [NORENDER] [/NORENDER] qui quelque soit le contenu entre les 2 balises n'est jamais interpété.
 
L'ennuie c'est si un utilisateur tape : blabla[/NORENDER]blabla
 
Ca va générer le texte suivant :  
 
[NORENDER]blabla[/NORENDER]blabla[/NORENDER]  
 
 et voila comment on en arrive à mon problème :)


Message édité par patastronch le 18-11-2008 à 15:01:22
Reply

Marsh Posté le 18-11-2008 à 15:13:46    

Je doute qu'utiliser des expressions régulières pour réaliser un parseur soit la solution idéale...
 
En outre, en PHP il y a déjà une extension qui fait bien son boulot :
http://fr.php.net/manual/fr/intro.bbcode.php
 
Pour revenir à ton dernier exemple, la solution consiste à mon sens simplement à encoder d'une manière ou d'une autre ce qu'a entré l'utilisateur, pour ne pas le confondre avec une balise. Puis t'utilises le procédé inverse quand tu veux retrouver le texte original. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 21-11-2008 à 18:11:43    

Ce n'est pas du BBcode. J'ai pris l'exemple du BBCode pour qu'il soit rapidement parlant.  
Par conrte ton lien semble pouvoir traiter n'importe quel langage a balise qu'on définirait et pas seulement le bbcode. Je vais jeter un oeil :) Mais je pense que le probleme du no-render se posera toujours :s
 
Merci en tous cas.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed