J'essaie de mettre en évidence les résultats de la recherche mais je souhaite inclure le texte environnant qui est limité par les balises englobantes.comment rechercher une sous-chaîne trouvée dans une chaîne de texte et la mettre en surbrillance
Donc, si le terme $ est « cool » le preg_replace devrait se retrouver avec:
<div><span style="background: #f00">My hair cut so cool!</span></div>
Malheureusement, mon regex ne semble pas saisir le texte qui l'entoure, seul le terme de $. Les étiquettes environnantes peuvent être n'importe quel type d'étiquette valide.
0:
1: $term = 'cool';
2: ob_start();
3:
10: foreach($items as $item) {
11: // echoing results here
12: echo '<div>' . $item->text . '</div>';
13: }
30: $content = ob_get_contents();
31: ob_clean() ;
32:
33: $pattern = "/(?<!<[^>])($term)/i";
34: $replace = "<span style=\"background: #f00\">$1</span>";
35: echo preg_replace($pattern, $replace, $content);
36:
EDIT: La boucle foreach est l'une des nombreuses et se trouve dans une classe distincte. Pour cette raison, je ne peux pas faire le remplacement dans la boucle elle-même. Il semble également plus efficace de traiter la sortie finale au lieu de chaque boucle sur les données.
Excellent site web (http://www.regexguru.com). J'étudierai plus. Je vous remercie! –