Problem mit preg_replace ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit preg_replace ?

    Hallo Leute,

    ich versuch grad eine art BBCode in meiner Seite einzubringen, was auch fast klappt, wenn ich nur einen Link plaziere...
    wenn ich aber mehr als einen einsetzten möchte, dann versagt meine funktion, kann mir jemand helfen?


    PHP-Code:
    function linking($code)
    {
     
    $muster[0] = "/\[link=(.*)\](.*)\[\/link\]/i";
     
    $Code2Html[0] = "<a href=\"\\1\" target=\"_blank\">\\2</a>";;
     
    $code preg_replace($muster$Code2Html$code);
     return 
    $code;
    }
    $string "Das ist [link=seite1.php]linktext1[/link] und das  [link=seite2.php]linktext2[/link]";

    echo 
    linking($string); 
    Ausgabe:
    link1 ist <a href="seite.php]linktext1[/link] und link 2 ist [link=seite.php" target="_blank">linktext2</a>
    Coder never die, they just GOSUB without RETURN

    Mein System

  • #2
    Code:
    /\[link=(.*)\](.*)\[\/link\]/iU
    sollte funktionieren...

    Noch besser wäre
    Code:
    #[link=([^\]]+)]([^\[]+)[/link]#i

    Kommentar


    • #3
      .* ist per Default Greedy d.h. mit dem wird der ganze String abgedeckt. Egal wieviele explizite Muster du weiter rechts noch schreibst. Die werden schlicht ignoriert weil .* ja eben auf fast alles zutrifft. Erst wenn du wie baker geschrieben hat den RegExp mittels U auf ungreedy setzt wird bei jedem Treffer durch .* auch geprüft ob nicht das folgende Muster auch auf den Treffer zutrifft. Wenn das der Fall ist geht der RegExp mit dem nächsten Muster weiter und "verlässt" .*
      Du kannst alternativ, wenn du nicht den ganzen RegExp ungreedy machen willst, auch einzelne .*-Muster mittels ? "entschärfen".
      In deinem Fall (.*?)
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Dankeschön !

        das funktioniert nun Tadellos !!
        obwohl der code an sich für mich noch nen rätsel ist...
        ich kann ihn verwenden.. aber weiß nicht, wie was warum das funktioniert
        Coder never die, they just GOSUB without RETURN

        Mein System

        Kommentar


        • #5
          Soweit ich weiß, wurde das Thema "greedy/ungreedy" hier erst letztens groß angeschnitten, einfach mal ein paar Threeads weiter unten schauen

          Kommentar

          Lädt...
          X