Andü: Suchen mit preg_replace

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;'>&nbsp;$2&nbsp;</span>",$text);

Doch damit funktioniert es nicht so wie ich mir das vorstell!

  1. 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;'>&nbsp;$2&nbsp;</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.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Mit Gesetzen ist es wie mit Würstchen - es ist besser, wenn man nicht weiß, wie sie gemacht werden. (Otto v. Bismarck)
    1. #>[^<]*($suchbegriff)#

      So geht's nicht, der findet zwar den Eintrag schreibt dann aber komischerweise ein < vor das Wort...

      1. 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.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Der beste Datenschutz ist das nicht-speichern von Daten. (Christian Kruse)