2009-12-08 3 views
1

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:

  1. Il correspond à texte qui est dans les attributs
  2. 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); 
+13

Voici le "Ne faites pas cela avec une regex" réponses ... –

+0

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

+0

J'ai réparé les blocs de code. Lorsque vous avez du code en ligne que vous voulez afficher, entourez-le avec des guillemets: ' –

Répondre

5

« Ne pas le faire avec une expression régulière. »

Utilisez un analyseur HTML, puis appliquez une expression régulière au contenu des éléments HTML tels qu'ils les identifient. Cela vous permettra d'opérer facilement sur un grand nombre de variantes de structure HTML, valides ou non, sans beaucoup d'expressions régulières et d'expressions régulières difficiles à gérer.

Robust and Mature HTML Parser for PHP

+5

Comment avez-vous lié à une autre question sur StackOverflow concernant ce problème et ne pas lier à celui-ci: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/ 1732454 # 1732454? – jason

+0

Comment avez-vous aimé quoi que ce soit sans lien vers: http://www.codinghorror.com/blog/archives/001311.html –

+1

@Jason Parce qu'amusant que cela puisse être, cela n'aide pas réellement l'OP à accomplir quelque chose. –

0

analyse syntaxique HTML est un sujet de recherche intéressant. Que voulez-vous dire par HTML? Il y a des normes (assez peu), et il y a des pages Web. La plupart des chercheurs n'utilisent pas d'expressions régulières pour analyser HTML

Questions connexes