Bonjour à tous, voilà quelques jours que je planche sur une expression régulière qui me permettrait de "nettoyer" des balises (X)HTML. Mon problème est le suivant :
Dans un code type :
<balise x="machin" param="truc" y="bidul" z=1>
J’aimerai pouvoir le transformer en :
<balise param="truc">
sachant que je ne sais ni le nom, ni la valeure de x, y et z, que ceux-cis sont optionnels et que les "" ne sont pas forcement présents.
Si un Dieu en expression réulières passe, merci de m’aider
C’est PHP4, ou PHP5 ? Peut-être qu’il serait plus simple et sûr d’utiliser DOM (avec loadHTML ou loadHTMLFile puisque les documents que tu traites ne semblent pas valides XML). Ensuite tu parcours l’arbre XML à l’aide d’une fonction récursive, ou alors tu récupères les éléments que tu veux modifier à l’aide de XPath, et tu modifies ce qu’il faut.
J’ai essayé avec les expressions régulières, je reconnais ne pas avoir réussi à faire ce que tu voulais. Voici ce que j’ai obtenu, cependant.
Le problème de ce code, c’est que la fonction callback replace ne reçoit que le dernier attribut de la balise, comme tu peux le voir si tu exécutes le script. Peut-être y’a-t-il un moyen de construire un pattern qui n’écraserait pas chaque nouvelle capture par une précédente, mais je l’ignore. Je ne me débrouille pas formidablement bien avec les expressions régulières.
On peut aussi filtrer simplement les attributs, avec un pattern de ce genre : i=("[^"]*"|[^ ]+)[/i]. Mais c’est risqué étant donné qu’il peut très bien y avoir ce genre de chaînes en dehors de la déclaration d’une balise, et qu’on perd l’avantage de connaitre la balise qui contient l’attribut.
Bref, je pense que le moyen le plus sûr pour ne pas avoir d’erreur est la solution DOM + éventuellement XPath… Mais peut-être que quelqu’un a mieux