Bonjour,
Je dois gérer un système où un logiciel génère ce genre de code :
fkgfgf <immediat><majeur><couteux>rzerzere</couteux>zerzerrze<peucouteux>fdsfdsfsd></peucouteux></majeur>fsdfsdfsdf</immediat>
Donc un système de tags imbriqués (un peu dans n'importe quel ordre, celui de leur saisie). Jusque là, aucun soucis particulier.
Le problème que je rencontre se situe au niveau de la relecture de fichiers édition qui sont les mêmes que les précédents, excepté le fait que les couples <tag>xxxx</tag> sont remplacés par des <span class='tag'>xxxx</span>
ce qui donne dans mon exemple précédent :
fkgfgf <span class='immediat'><span class='majeur'><span class='couteux'>rzerzere</span>zerzerrze<span class='peucouteux'>fdsfdsfsd></span></span>fsdfsdfsdf</span>
Or il faut que je convertisse ce fichier édition dans le format précédent
Une boucle de :
Code :
- $item = preg_replace('#<span class=\'(immediat|rapide|lent|immobile|critique|majeur|mineur|optionnel|investplanifie|couteux|peucouteux|gratuit)\'>(.*?)</span>#', "<$1>$2</$1>", $item);
|
fonctionne partiellement mais a le grand désavantage de mettre les balises fermantes la plupart du temps au mauvais endroit.
Ce que je n'arrive pas à exprimer c'est une chaine ne contenant pas une sous-chaine.
J'ai besoin de dire dans un preg_replace : une chaine qui commence par <span class qui se termine par </span> et qui ne contient pas <span et c'est cette dernière partie que je ne parviens pas à encoder car je ne sais pas comment l'écrire.
A noter que :
Code :
- $idem = preg_replace('#<span class=\'(immediat|rapide|lent|immobile|critique|majeur|mineur|optionnel|investplanifie|couteux|peucouteux|gratuit)\'>([^<]*?)</span>#', "<$1>$2</$1>", $item);
|
pour dire
une chaine qui commence par <span class qui se termine par </span> et qui ne contient pas < fonctionne très bien. Mais ce n'est pas ce que je souhaite
J'ai essayé plein de choses, par exemple :
Code :
- $idem = preg_replace('#<span class=\'(immediat|rapide|lent|immobile|critique|majeur|mineur|optionnel|investplanifie|couteux|peucouteux|gratuit)\'>((^(<span))*?)</span>#', "<$1>$2</$1>", $item);
|
pour essayer de ne remplacer un couple <span </span> que s'il n'y a pas de <span entre les deux
Mais mes syntaxes ne fonctionnent pas.
J'ai essayé de rechercher un topic qui parle un peu de ce sujet dans le forum mais sans vraiment trouver une solution à mon besoin.
Merci d'avance pour vos avis éclairés.
Message édité par dandes91 le 26-05-2009 à 11:58:16