Frage zu preg_replace



  • Hallo zusammen,

    wünsche frohes Fest gehabt zu haben 🙂

    Ich habe ein Problem mit preg_replace. In einem langen String sollen nach einer Suche alle Vorkommen einer Zeichenkette fett markiert werden, außer es steht ein bestimmtes Zeichen davor. Dann soll die Markierung nicht durchgeführt werden.

    Um alle zu markieren hab ich bisher Folgendes:

    $content = preg_replace('/(' . $sv. ')/si', "<b>\$1</b>", $content);
    

    Kommt nun ein ?cid= oder einfach nur cid= vor dem Suchstring vor, so soll er es nicht fett markieren. Dafür habe ich das hier ausporbiert:

    $content = preg_replace('/((^cid=)' . $sv. ')/si', "<b>\$1</b>", $content);
    

    Leider wird dann gar nichts mehr markiert. Hat einer von euch den entscheidenen Hinweis für mich?

    Vielen Dank im Voraus

    LG



  • $content = preg_replace('/((^cid=)' . $sv. ')/si', "<b>\$1</b>", $content);
    

    Hmm, ich kenn mich da nicht unbedingt aus, aber ein Versuch wäre es ja wert:

    $content = preg_replace('/((^c^i^d=)' . $sv. ')/si', "<b>\$1</b>", $content);
    

    Für mich bedeuten die (), dass innerhalb nacheinander nur eine "Kapselung" mit und-Verknüpfung erfolgt. Wenn du also alles einfetten willst, was
    an erster Stelle KEIN "c" UND
    an zweiter Stelle KEIN "i" UND
    an dritter Stelle KEIN "d" UND
    an vierter Stelle EIN "=" hat,
    dann würde ich das auch so schreiben.

    Falls PHP die () Klammern benutzt um das Vorkommen auch gleich noch temporär zu speichern, dann probiers zusätzlich noch damit:

    $content = preg_replace('/(^c^i^d=' . $sv. ')/si', "<b>\$1</b>", $content);
    

    Wie gesagt, ich hab damit zwar mal gearbeitet, aber ob ich das so alles richtig verstanden habe.

    Noch schöne Feiertage



  • Wenn ich mich richtig erinnere: allen Sonderzeichen, also auch dem "=", muss ein \ vorangestellt werden. :xmas1:


Anmelden zum Antworten