J'essaie d'écrire un script qui analyse un bloc de HTML et fait correspondre les mots à un glossaire de termes donnés. S'il trouve une correspondance, il enveloppe le terme dans <a class="tooltip"></a>
et fournit une définition.Besoin d'un gourou RegEx
Il travaille bien - sauf deux défauts majeurs:
- Il correspond à texte qui est dans les attributs
- Il correspond à texte qui est déjà dans une balise
<a>
, créé un lien imbriqué.
Existe-t-il un moyen pour que mon expression régulière corresponde uniquement aux mots qui ne sont pas dans les attributs, et pas aux tags <a>
?
Voici le code que je utilise, dans le cas où il est pertinent:
foreach(Glossary::map() as $term => $def) {
$search[] = "/\b($term)\b/i";
self::$lookup[strtoupper($term)] = $def;
}
return preg_replace_callback($search, array(&$this,'replace'),$this->content);
Voici le "Ne faites pas cela avec une regex" réponses ... –
Edit: Cela devrait lire "pas dans A tags" .. le HTML a été retiré. Ce n'est pas grave si le texte apparaît dans une balise autre qu'une balise d'ancrage. – Aaron
J'ai réparé les blocs de code. Lorsque vous avez du code en ligne que vous voulez afficher, entourez-le avec des guillemets: ' –