Salut à tous,
Je suis bloqué sur une expression régulière que je n'arrive pas à trouver. Et pourtant je cherche depuis pas mal de temps. J'ai développé un système de gestion d'acronymes, abréviations et définitions de mots qui doivent être remplacés automatiquement par leur équivalence dans un contenu HTML. Globalement, je transforme l'acronyme "HTML" en '<acronym title="HyperText Markeup Language">HTML</acronym>'.
Un str_replace() ou bien un preg_replace() suffit vous allez me dire. Mais non fait. Le texte dans lequel je doit remplacer les mots est une chaine HTML. Donc le problème, c'est lorsque je trouve mon mot "HTML" dans l'attribut "title" de tel ou tel tag dans ma page. Et bien mon simple preg(str)_replace() va remplacer ce mot qui se trouve dans un attribut HTML. Et vous vous en doutez, ça explose tout le code HTML final. Ce que j'aimerai donc faire, c'est de pouvoir remplacer les mots qui se trouvent éventuellement entre les tags HTML :
(par exemple) <a href="lien" title="un titre">bla bla le_mot bla bla</a>
Mais pas si 'le_mot' se trouve dans un attribut d'un tag HTML.
Voici le motif que j'ai réalisé jusqu'à maintenant mais qui ne marche pas :(
<?php
$sLaChaine = 'Il faut <a href="#" title="truc">remplacer le_mot</a> dans cette chaine HTML
mais ne pas remplacer <span title="Définition de le_mot">le_mot</span> quand il
se trouve dans un attribut d\'un tag HTML';
$sAcronym = 'le_mot';
$sDefinition= 'Définition de mon mot';
$texte = preg_replace('`(<[a-z]+[^>]*>)?(\b'.$sAcronym.'\b)(</[a-z]+[^>]*>)?`si','<acronym title="'. $sDefinition .'">'. $sAcronym .'</acronym>', $sLaChaine);
?>
Je vous remercie de votre aide.
Hugo.