[done] Kleines RegExp Problem

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

[done] Kleines RegExp Problem

Beitrag 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
Zuletzt geändert von Kukulkan am 18.08.2010 14:24, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Kleines RegExp Problem

Beitrag 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>
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Kleines RegExp Problem

Beitrag von Kukulkan »

Hi Stargate,

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

Vielen Dank!

Volker
Antworten