Aide pour regexp (expression rationnelle)

Le
Yann
Bonjour,

Ma question relève plus de l'expression rationnelle que de PHP, mais
comme c'est souvent lié, je poste ici. N'hésitez pas à me dire si ce
message aurait une meilleure place ailleurs.

J'aimerais remplacer les mots d'un texte par un lien vers leur
définition. Le code basique ci-dessous marche, avec les défauts suivants
: 1. Si le mot à remplacer est dans une balise <>, il est remplacé
alors qu'il ne devrait pas. 2. Si le mot à remplacer est déjà entre <a>
et </a>, il est remplacé alors qu'il ne devrait pas.

Savez-vous comment faire pour corriger ces 2 problèmes ?

Merci !
Yann


<?php

$definitions["cactus"] = "Plante qui pique";
$definitions["chien"] = "Mammifère qui aboie";

function glossarisation($texte) {
global $definitions;
foreach ($definitions as $mot => $definition) {
if (eregi("([^a-zA-Zàéèêëïîôùü])$mot([^a-zA-Zàéèêëïîôùü])", " ".$texte." ")) {
$texte = eregi_replace("([^a-zA-Zàéèêëïîôùü])($mot)([^a-zA-Zàéèêëïîôùü])", "\1<a href="glossaire.php?mot=$mot">\2</a>\3", " ".$texte." ");
}
}
return $texte;
}

// Exemple qui marche
$texte1 = "La caravane passe devant les cactus, le chien aboie.";
echo glossarisation($texte1);

// Exemple qui ne marche pas, car le mot cactus dans le title de la balise <a> est remplacé
$texte2 = "La <a href="http://example.com/" title="La caravane des cactus">caravane</a> passe devant les cactus, le chien aboie.";

// Exemple qui ne marche pas, car le mot cactus est déjà entre <a> et </a> et ne doit pas être remplacé
$texte3 = "La caravane passe devant les <a href="http://cactuspro.com">cactus</a>, le chien aboie.";

?>
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fser
Le #728505
Je n'ai pas le temps de trop detailler, mais si tu ne veux que des liens
cliquables, je te conseil ce site :
http://www.siteduzero.com/php/regex2.php#capture
Publicité
Poster une réponse
Anonyme