Bonjours à tous.
J'ai un petit soucis de regex:
J'ai un éditeur visuel qui créé du code html strict et j'ai besoin de transformer les balises que j'autorise en bbcode avant de supprimer toutes les autres balises html.
--Toutes les balises BBcodes sont avec un espace supplémentaire pour ne pas être interprété par le forum; mais je suppose que vous vous en doutiez ^^--
Passer de <b></b> à [ B][ /B] ou de <span style="font-weight:bold"></span> à [ B][ /B] c'est pas un problème mais là ou ça se complique:
<span style="font-weight:bold; text-decoration:underline;"></span> à [ B][ U][ /B][ /U] ça commence à devenir la me***
surtout sachant qu'il peut y avoir jusqu'à 3 style par span (B-U-I), et pas forcement dans cette ordre.
Pour plus de clarté, voici un petit exemple généré par mon editeur (les 12 possibilité):Pour le moment j'ai donc fais la regex que voici (je pensais faire 12 regex différente pour me simplifier la tâches):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <span style="font-weight: bold; font-style: italic;">G-I</span><br> <span style="font-style: italic; font-weight: bold;">I-G</span><br> <span style="font-weight: bold; text-decoration: underline;">G-S</span><br> <span style="text-decoration: underline; font-weight: bold;">S-G</span><br> <span style="font-style: italic; text-decoration: underline;">I-S</span><br> <span style="text-decoration: underline; font-style: italic;">S-I</span><br> <span style="font-weight: bold; font-style: italic; text-decoration: underline;">G-I-S</span><br> <span style="font-weight: bold; text-decoration: underline; font-style: italic;">G-S-I</span><br> <span style="font-style: italic; font-weight: bold; text-decoration: underline;">I-G-S</span><br> <span style="font-style: italic; text-decoration: underline; font-weight: bold;">I-S-G</span><br> <span style="text-decoration: underline; font-weight: bold; font-style: italic;">S-G-I</span><br> <span style="text-decoration: underline; font-style: italic; font-weight: bold;">S-I-G<br></span>
Problème: si on reprend mon exemple, la première balise est bien remplacée par [ B][ I]; par contre il remplace pas le bon </span>, c'est-celui de la dernière ligne qu'il remplace...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $texte = preg_replace("#<span style=\"font-weight: bold; font-style: italic;\">(.+)</span>#","[ B][ I]$1[ /B][ I]", $texte);
Je peux même pas lui dire "prends le premier </span> etant donné qu'il peux y avoir un span dans le span ....
Donc voila je bloque :S
Si vous pouviez éclairer ma lanterne
Merci d'avance.
Partager