preg_replace Problem

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

  • preg_replace Problem

    Hi,

    habe ein kleines Problem mit preg_replace. Zur Veranschaulichung ein einfaches Beispiel

    PHP-Code:
    <?
    $string='asdfsadfl [[sdfsdf]] asdfsdf [[sdfsadfasdf]]';
    $string=preg_replace("/\[\[(.*)\]\]/m","||",$string);
    echo $string;
    ?>
    Ich möchte alle Textstellen, die das Muster "[[blabla]]" besitzen durch "||" ersetzten. Mein Problem ist, dass nur das erste Muster im String ersetzt wird. Das zweite wird ignoriert.

    Wie kann ich es bewirken, dass der gesamte String berücksichtigt wird?


    hemfrie

  • #2
    escape [ und ]:
    PHP-Code:
    $string=preg_replace('/\[\[.*\]\]/Um','||',$string); 
    EDIT:

    Das Forum hat das \ geschluckt. Stelle Dir oben vor jedem [ und ] ein \ vor.

    Kommentar


    • #3
      Wenn ich mich nicht irre, darfst du eckige Klammern nicht einfach so verwenden:
      PHP-Code:
      <?
      $string='asdfsadfl [[sdfsdf]] asdfsdf [[sdfsadfasdf]]';
      $string=preg_replace("/\\[\\[(.*)\\]\\]/m","||",$string);
      echo $string;
      ?>
      Wobei es auch sein kann, dass du die Backslashes da hast, dass nur das Forum die verschluckt hat
      hopka.net!

      Kommentar


      • #4
        PHP-Code:
        <?

            $string = 'asdfsadfl [[sdfsdf]] asdfsdf [[sdfsadfasdf]]';

            $string = preg_replace('!\\\[\\\[(.*?)\\\]\\\]!m', '||', $string);

            echo $string;

        ?>
        EDIT:
        grrrrr
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          super Danke!
          die \ hatte ich bei mir auch gehabt. Es lag am U.

          Was für ein modifier ist das?


          hemfrie

          Kommentar


          • #6
            Original geschrieben von hemfrie
            Was für ein modifier ist das?
            http://www.php-resource.de/tutorials/read/10/1/


            abgesehen davon ist das auch ohne U möglich....
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              oh schön, das ist mal ein übersichtliches Tutorial.
              Vielen Dank für die Hilfe und ein schönes Wochenende noch.


              hemfrie

              Kommentar


              • #8
                Original geschrieben von Abraxax
                http://www.php-resource.de/tutorials/read/10/1/
                Hmm, ich würde auch gerne wissen, wozu U gut ist.
                Im Tutorial werden i,s und m beschrieben.
                hopka.net!

                Kommentar


                • #9
                  U ist für ungreedy. Normalerweise wird versucht soviel wir möglich zu matchen.
                  Ungreedy eben so wenig wie möglich.

                  @abarxas: Wie hättest Du's gelöst?

                  Kommentar


                  • #10
                    Original geschrieben von kutiku
                    @abarxas: Wie hättest Du's gelöst?
                    siehe mein post...

                    ?
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Ohne es zu testen bin ich der Meinung, dass Dein RegExp aus "dasd[[1]]bla[[2]]dsad" auf "[[1]]bla[[2]]" matchen wird (weil eben greedy).
                      Aber evtl. irre ich mich auch, und dieses (.*?) bedeutet etwas ganz besonderes, denn so wie es da steht verstehe ich den Sinn leider nicht.

                      Kommentar


                      • #12
                        teste es einfach. das ? ist das ungreedy. nicht mehr und nciht weniger... und... man kann es jeweils bestimmen, wo man ungreedy haben will. mit U geht das eben nur allgemein....

                        dennoch ein tipp.... erst testen, dann posten/fragen....
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar

                        Lädt...
                        X