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).