norman: RegEx wieder einmal

hallo allesamt,

ich hab schon haufenweise artikel/einträge gelesen, aber keines vermochte mein problem zu lösen...

ich möchte folgendes ersetzen:
 <!-- {start} -->
   hier ist irgendein text....
 <!-- {ende} -->

mit preg_replace("/<!-- {start} -->(.*)<!-- {ende} -->/",....)
geht nichts. auch andere schreibweisen haben mich nicht weitergebracht?

hat jemand eine lösung parat??

thx in advance,
norman

  1. Hallo!

    ich möchte folgendes ersetzen:
     <!-- {start} -->
       hier ist irgendein text....
     <!-- {ende} -->

    Ich vermut mal du willst das in der Mitte haben??? Wennst du es nämlich nur ersetzen willst, dann $neuerString="Hier irgendwas neues!" ;-)

    Ansonsten probier' mal das:
    $neuerString=preg_replace("/^.*<!-- {start} -->(.*?)<!-- {ende} -->.*$/msi","\1",$string);

    Ist aber nicht das Optimum! Geht schneller..., bin aber zu faul zu überlegen! :-)

    Ciao,
    Andy

    1. hallo,

      Ich vermut mal du willst das in der Mitte haben??? Wennst du es nämlich nur ersetzen willst, dann $neuerString="Hier irgendwas neues!" ja, das in der mitte will ich weg.

      aber mit dem /msi war schon richtig!! muss mir mal die optionen anschauen :-)

      danke,
      norman

    2. hallo,

      noch ein problemchen:

      preg_replace("/<!-- {start} -->(.*)<!-- {ende} -->/msi",...)

      ist schon ganz gut, aber vom
      <!-- ende ODER start, das weiß ich leider nicht genau,
      bleibt "<!" über - und das ist im html code nicht so super, weil dann einiges ausgeblendet wird....

      what's los???

      thx,
      ciao

      1. Hallo!

        preg_replace("/<!-- {start} -->(.*)<!-- {ende} -->/msi",...)

        ist schon ganz gut, aber vom
        <!-- ende ODER start, das weiß ich leider nicht genau,
        bleibt "<!" über - und das ist im html code nicht so super, weil dann einiges ausgeblendet wird....

        Ist aber nicht das, was ich dir geschrieben habe?!
        Wieso schreibst du immer "!" ? Brauchst du nicht, reicht auch "!" allein!

        Also bei mir bleibt kein <! übrig! Bei deiner Bedingung bleibt aber alles vor <!-- start --> und hinter <!-- ende --> auch übrig!

        Vielleicht ist das dein Problem! Hast du meine Expression probiert?

        Ciao,
        Andy

        1. hallo,

          aha - hab mich vielleicht nicht deutlich ausgedrückt:

          ----------------
          TEXT
          <!-- {start} -->
             text zu ersetzen
          <!-- {ende} -->
          NOCH MEHR TEXT
          ----------------

          also: inkl. den ersetzungsmarken soll "text zu ersetzen" weg.
          rundherum das soll bleiben. daher kann ich ja auch nicht mit deinem arbeiten oder? weil da wäre dann ja ALLES weg....

          thx

          1. Hallo!

            TEXT
            <!-- {start} -->
               text zu ersetzen
            <!-- {ende} -->
            NOCH MEHR TEXT

            also: inkl. den ersetzungsmarken soll "text zu ersetzen" weg.
            rundherum das soll bleiben. daher kann ich ja auch nicht mit deinem arbeiten oder? weil da wäre dann ja ALLES weg....

            Nee! Bei meinem kompletten Code bleibt "text zu ersetzen" übrig!

            Aber wenn das so is, dann müsste dein Code eigentlich funzen:
            $neuerString=preg_replace("/<!-- {start} -->.*<!-- {ende} -->/msi","",$string);

            Die Klammer um .* kannst dir dann sparen, da du den Ausdruck nicht weiter verwenden willst.

            Schau bitte noch mal!

            Ciao,
            Andy

            1. jo, passt eh :-)
              is eh nicht von diesem teil übergeblieben, sondern bei einem anderen...

              sorry .-)

              ciao

              1. Hallo!

                jo, passt eh :-)
                is eh nicht von diesem teil übergeblieben, sondern bei einem anderen...

                Dann is ja gut! :-)

                Beachte auch noch die Nachricht von Eternius! Falls du mehrere <!-- start --> <!-- ende --> haben solltest, musst du den Ausdruck ungreedy setzen, sonst verschwindet alles zwischen dem ersten start und dem letzten ende!

                Ciao,
                Andy

            2. hallo

              $neuerString=preg_replace("/<!-- {start} -->.*<!-- {ende}

              ^                                                  |

              make it non greedy?                          -->.*?<!--

              gruss

              --
              no strict; no warnings;
              1. Hallo Eternius!

                $neuerString=preg_replace("/<!-- {start} -->.*<!-- {ende}
                                                                 ^
                                                                 |

                make it non greedy?                          -->.*?<!--

                Hab' ich auch schon dran gedacht! Aber er hat ja nicht geschrieben, das mehrere <!-- start --> <!-- ende--> da sind! ;-) Ansonsten geht auch /..../Umsi!

                Ist die gleiche Schreibarbeit, die Frage ist welcher Weg ist weiter. Zur u-Taste oder zur ß-Taste + SHIFT natürlich! ;-)

                Ciao,
                Andy

                1. ;-)

                  also ich kenn mich in php so richtig gar nicht aus, aber ich schätze mal der parameter da macht alle .* nicht greedy, also gefällt mir dann das ? besser, falls ich noch mal mr greedy brauch im ausdruck.

                  long live perl ;-)

                  --
                  no strict; no warnings;
                  1. Hallo!

                    also ich kenn mich in php so richtig gar nicht aus, aber ich schätze mal der parameter da macht alle .* nicht greedy, also gefällt mir dann das ? besser, falls ich noch mal mr greedy brauch im ausdruck.

                    Na dann kann man ja .*? schreiben, dann ist der Ausdruck wieder greedy! :-)
                     U kehrt die Greedinees praktisch um! Und ja, dieser Parameter ist nicht kompatibel zu Perl, sondern alleinige PHP-Spezialität!

                    .*? ohne U ist natürlich besser, da man den Ausdruck leichter portieren kann!

                    So Thema abgeschlossen!

                    Ciao,
                    Andy

    3. Hello,

      bei so eindeutigen Mustern als Trenner könnte auch zweimaliges explode() helfen und ersetzen und wieder zusammenbauen...

      http://de2.php.net/manual/de/function.explode.php

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen