Expression rationnelles et ordre de parcours - PHP - Programmation
Marsh Posté le 17-11-2008 à 09:30:10
Tu pourrais déjà expliquer pourquoi ton premier </coucou> devrait être complètement ignoré ?
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
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.
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.
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).