Suchen mit preg_replace
Andü
- php
Hallo!
Ich versuche in einem HTML-Quelltext nach allen Vorkommen, von einem bestimmtem Suchmuster zu suchen und diesen dann durch eine Markierung hervorzuheben. Logischerweise möchte ich nicht, dass HTML-Tags davon in Mitleidenschaft gezogen werden.
Mein bisheriges Suchmuster ist folgendes:
preg_replace ("#(^<*)($suchbegriff)(^>*)#","<span style='background-color: #FB6615; color: #FFFFFF;'> $2 </span>",$text);
Doch damit funktioniert es nicht so wie ich mir das vorstell!
Hi Andü,
Ich versuche in einem HTML-Quelltext nach allen Vorkommen, von einem bestimmtem Suchmuster zu suchen und diesen dann durch eine Markierung hervorzuheben. Logischerweise möchte ich nicht, dass HTML-Tags davon in Mitleidenschaft gezogen werden.
HTML Tags würde doch eigentlich nur dann in Mitleidenschaft gezogen, wenn jemand z.B. "span" als Suchbegriff angibt, richtig?
Mein bisheriges Suchmuster ist folgendes:
preg_replace ("#(^<*)($suchbegriff)(^>*)#","<span style='background-color: #FB6615; color: #FFFFFF;'> $2 </span>",$text);
Doch damit funktioniert es nicht so wie ich mir das vorstell!
[x] Du möchtest uns eine genauere Fehlerbeschreibung liefern.
Mal überlegen - vor dem Suchbegriff darf kein < stehen ohne von einem > gefolgt zu werden. Wenn das klar gestellt ist, muss man eigentlich nach dem Suchbegriff gar nicht mehr weiter kontrollieren (vorrausgesetzt du hast schon länst kontrolliert, dass im Suchbegriff keine < und > enthalten sind).
Um das richtig[tm] intelligent umzusetzten müsste man das wohl mit Conditional Subpatterns umsetzen.
Es würde aber vielleicht auch reichen, wenn man nur prüft, ob davor ein > kommt und danach kein < mehr:
#>[^<]*($suchbegriff)#
Probier mal ein bisschen rum.
MfG, Dennis.
#>[^<]*($suchbegriff)#
So geht's nicht, der findet zwar den Eintrag schreibt dann aber komischerweise ein < vor das Wort...
Hi Andü,
#>[^<]*($suchbegriff)#
So geht's nicht, der findet zwar den Eintrag schreibt dann aber komischerweise ein < vor das Wort...
Joa, wenn du preg_replace() verwendest, musst du alles was vorne im RegEx steht auch hinten wieder einbauen, sonst gehts verloren ;-)
Versuchs mal mit:
preg_replace("#(>[^<]*)($suchbegriff)#Ui", "$1<span class=\"gefunden\">$2</span>", $string);
Ungetestet, von der Idee her sollte es aber eigentlich gehen... Die Modifiers U und i habe ich noch angehängt, damit 1. einmal die "Gefräßigkeit" ausgeschaltet wird und 2. nicht zwischen Groß- und Kleinbuchstaben unterschieden wird.
MfG, Dennis.