[Regex] Remplacer des mots qui se trouvent entre un tag HTML

Résolu
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 - 20 mars 2008 à 17:48
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 - 22 mars 2008 à 10:54
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
'[lien bla bla le_mot bla bla]


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 :(

<tt style="font-size: 9pt;"><?php

$sLaChaine = 'Il faut [# remplacer le_mot] dans cette chaine HTML 

mais ne pas remplacer le_mot 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',''. $sAcronym .'', $sLaChaine);

?>

</tt>
Je vous remercie de votre aide.


Hugo.

2 réponses

webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
22 mars 2008 à 10:54
Bonjour,

Merci pour cette réponse mais finalement j'ai eu ma réponse sur les forums de PHPScripts-fr. J'ai écrit un tutoriel sur mon site pour présenter la réponse.

Hugo HAMON
LP Développeur d'Applications Multimédia Multisupports - Ecole Gobelins - Annecy
-------
http://www.apprendre-php.com[apprendre à program
3
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
22 mars 2008 à 00:48
Salut,

Il est tard mais voici une piste:

<?php

$sAcronym = 'le_mot';
$sDefinition= 'Définition de mon mot';
$sText = 'Il faut [# remplacer le_mot] dans cette chaine HTML
mais ne pas remplacer le_mot quand il
se trouve dans un attribut d\'un tag HTML';

echo preg_replace('#(>.*?)('.$sAcronym.')(.*?<)#','$1$2$3', $sText);

?>
0
Rejoignez-nous