Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Aide pour regexp (expression rationnelle)

1 réponse
Avatar
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.";

?>

1 réponse

Avatar
Fser
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