2010-06-30 3 views
1

J'essaie d'utiliser regex pour analyser du texte brut et ajouter une définition à partir d'un glossaire à tous les mots qui correspondent. Je le fais comme ceci: essayer d'afficher des définitions pour des mots qui se trouvent dans un glossaire

for ($i = 0; $i < count($terms); $i++) { 
    $search = '|(?<=\b)('.preg_quote($terms[$i]['title']).')(?=\b)|i'; 
    $replace = '<a class="tt2" rel="tooltip" title="'.$terms[$i]['pageBody'].'">$1</a>'; 
    $string = preg_replace($search,$replace,$string); 
} 

Je retourne alors $string, cependant si l'une des définitions contient un mot qui est défini plus tard alors la définition est ajoutée à cela aussi, donc je ne veux pas inclure les mots qui sont dans le title="" . J'ai essayé de mettre (?!<=title=") mais cela ne fonctionne pas si la définition est composée de plusieurs mots et que la correspondance n'est pas le premier mot.

Des idées?

exemple texte d'entrée:

Plus de 40 000 fossiles, roches et minéraux témoignent des changements vitaux que le paysage de Devon a vu au cours des 490 derniers millions d'années. La météorite âgée de 4,5 millions d'années est une relique des débuts de notre planète. Les squelettes d'ichtyosaures représentent une époque où les grands reptiles dominaient les océans et où les dinosaures dominaient la terre. Les défenses de mammouth sont des vestiges du dernier âge de glace au cours duquel la plupart des caractéristiques du paysage d'aujourd'hui se sont développées.

Répondre

0

Vous pouvez en 2 passes:

1 - replace $term[$i]['title'] by something like XXX$iXXX 
2 - replace XXX$iXXX by <a ... title="$terms[$i]['pageBody'] ... 
+0

grâce, qui semble fonctionner – ianbarker

Questions connexes