Seite 1 von 1

[done] Kleines RegExp Problem

Verfasst: 18.08.2010 13:39
von Kukulkan
Hallo,

ich möchte in HTML Text bestimmte Begriffe hervorheben (nutze PHP). Dazu verwende ich aktuell folgende Regular Expression:

Code: Alles auswählen

$HighLight = 'searchTerm';
$Pattern = '/(.*)(' . $HighLight . ')(.*)/i';
$Replace = '$1<b>$2</b>$3';
$NewHTML = preg_replace($Pattern, $Replace, $OldHTML);
Leider ergänzt das den Suchbegriff mit den <b> Tags auch in Image-Tags und Links. Das führt zu defekter Darstellung. Wie muss ich das Pattern anpassen, damit es nicht in geschlossenen Tags arbeitet?

Also nicht innerhalb von zB <a href="link"> oder in <img src="link"> etc.?

Ich steh grad auf'm Schlauch :freak:

Grüße,

Volker

Re: Kleines RegExp Problem

Verfasst: 18.08.2010 14:02
von STARGÅTE
Vorab:

Code: Alles auswählen

$Pattern = '/(.*)(' . $HighLight . ')(.*)/i';
$Replace = '$1<b>$2</b>$3';
die sachen am anfang und ende sind überflüssig ... da ja eh nur nach dem eigentlichen Wort gesucht werden soll reicht:

Code: Alles auswählen

$Pattern = '/(' . $HighLight . ')/i';
$Replace = '<b>$1</b>';
Zum Problem, es geht leider nicht , einfach nach einem < zu suchen und zu prüfen ob es davor ist, weil dann eben einfach n keinere Auswahl genommen wird.
Stattdessen würde ich prüfen ob sichergestellt ist das nach einem Wort ein < kommt und kein > ...
Da alles in <body> steht, sollte das klappen:

Code: Alles auswählen

$OldHTML = '<body>aber <img src="Laber"> Laber aber Laber</body>';
$HighLight = 'Laber';
$Pattern = '/(' . $HighLight . ')(?=[^\>]*\<)/i';
$Replace = '<b>$1</b>';
$NewHTML = preg_replace($Pattern, $Replace, $OldHTML);
Ergebnis
Das img hat immer noch den verweis auf "Laber"
<body>aber <img src="Laber"> <b>Laber</b> aber <b>Laber</b></body>

Re: Kleines RegExp Problem

Verfasst: 18.08.2010 14:23
von Kukulkan
Hi Stargate,

wow, das klappt Super. Die Idee ist gut und strifft bei mir auch immer zu.

Vielen Dank!

Volker