Bonjour à tous,
J'ai un casse tête qui nécessite l'aide de pro de l'expression régulière
Contexte : je dois enrichir un texte HTML en remplaçant certains mots par des liens. Par exemple, je dois remplacer "mot" par "<a href="...>mot</a>"
La difficulté c'est de ne pas rajouter des liens (1) dans des attributs de balise et (2) dans d'autres liens (imbrication de liens).
J'ai réussi à trouver une solution pour répondre le cas (1) mais le je n'arrive pas à traiter le cas (2).
Voici mon code simplifié :
String texte="exemple de texte <a>exemple de texte</a> exemple <a href='http://www.exemple.com'>un bel exemple</a>";
String mot_a_enrichir="exemple";
String pattern="\\b"+mot_a_enrichir+"\\b(?![^<>]*+>)"; //la partie "tordue" de la fin permet de ne pas toucher à des attributs
String lien="["+mot_a_enrichir+"]"; //pour plus lisibilité, le lien généré est remplacé par des crochets
System.out.println(texte.replaceAll(pattern,lien));
Le résultat est :
[exemple] de texte <a>[exemple] de texte</a> [exemple] <a href='http://www.exemple.com'>un bel [exemple]</a>
Dans le texte en rouge, je me retrouve avec deux liens imbriqués
Avez-vous une idée pour réaliser cette modification ?
Merci d'avance
Partager