Viennamade: Regulärer Ausdruck

Hallo!

Vorweg, mit Regulären Ausdrücken beschäftige ich mich erst seit ein paar Stunden, daher ist mein Problem wahrscheinlich einfach.
Folgender HTML-Quelltext (die Rem-Zeilen sind relevant):

<!-- NavigationAnfang-->
...
<!-- NavigationEnde-->

So der ganze Seiteninhalt steht in $inhalt und von da will ich ihn raus haben. Mein Versuch

echo preg_replace("^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$", '', $inhalt);

wir vom PHP mit 'Warning: No ending delimiter '^' found in search.php on line 62' kommentiert.

Bitte um Hilfe.
Viennamade

  1. Halihallo Viennamade

    Folgender HTML-Quelltext (die Rem-Zeilen sind relevant):

    Das sind Kommentare :-)
    REM gibt's nur bei BASIC und im Schlaf ;-)

    So der ganze Seiteninhalt steht in $inhalt und von da will ich ihn raus haben. Mein Versuch

    Äm. Mit untenstehender Regular Expression entfernst du lediglich die
    ganze "Navigation", wenn ich den Kontext richtig deute. Ist das
    gewollt, ja?

    echo preg_replace("^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$", '', $inhalt);

    http://www.php.net/pregreplace
    Suchmuster werden zwischen '/' definiert!

    wir vom PHP mit 'Warning: No ending delimiter '^' found in search.php on line 62' kommentiert.

    Wahrscheinlich hängts an den fehlenden '/'s.

    Viele Grüsse

    Philipp

    1. Hi,

      http://www.php.net/pregreplace
      Suchmuster werden zwischen '/' definiert!

      Nein. Suchmuster können zwischen / definiert werden.

      Es ist aber so, daß schlicht und einfach das erste Zeichen als Begrenzer benutzt wird.

      wir vom PHP mit 'Warning: No ending delimiter '^' found in search.php on line 62' kommentiert.

      Eben deswegen wird das fehlende ^ bemängelt - ^ ist das erste Zeichen, also wird es als Begrenzer genommen.

      Lösung: Begrenzer-Zeichen einfügen.

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hallo!

        http://www.php.net/pregreplace
        Suchmuster werden zwischen '/' definiert!

        Nein. Suchmuster können zwischen / definiert werden.

        Es ist aber so, daß schlicht und einfach das erste Zeichen als Begrenzer benutzt wird.

        wir vom PHP mit 'Warning: No ending delimiter '^' found in search.php on line 62' kommentiert.

        Eben deswegen wird das fehlende ^ bemängelt - ^ ist das erste Zeichen, also wird es als Begrenzer genommen.

        Lösung: Begrenzer-Zeichen einfügen.

        Ich habe die angezeigten Begrenzungszeichen eingefügt, aber falsch, ich erhalte jetzt 'Warning: No ending delimiter '^' found in search.php on line 62'

        $inhalt = preg_replace("^/<!-- NavigationAnfang-->/(.*)./<!-- NavigationEnde-->/$", '', $inhalt);
                                 ^                        ^      ^                      ^
        :-( (Ich weiß, das ist eine schwere Geburt)
        Viennamade

        1. Hallo Viennamade,

          Ich habe die angezeigten Begrenzungszeichen eingefügt, aber
          falsch, ich erhalte jetzt 'Warning: No ending delimiter '^' found
          in search.php on line 62'

          Lies doch einfach mal das Manual, Mensch ;-)

          $inhalt = preg_replace("^/<!-- NavigationAnfang-->/(.*)./<!-- NavigationEnde-->/$", '', $inhalt);

          $inhalt = preg_replace("/^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$/", '', $inhalt);

          Grüße,
           CK

          --
          So, wie ein Teil ist, ist das Ganze.
          http://wwwtech.de/
        2. Hi,

          $inhalt = preg_replace("^/<!-- NavigationAnfang-->/(.*)./<!-- NavigationEnde-->/$", '', $inhalt);

          Die gehören ja auch nicht mitten in den Regulären ausdruck, sondern vor dessen Anfang und nach dessen Ende.
          Darum heißen sie ja auch Begrenzer und nicht Mittendrinner ;-)

          cu,
          Andreas

          --
          MudGuard? Siehe http://www.Mud-Guard.de/
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        3. Halihallo Viennamade

          Nein. Suchmuster können zwischen / definiert werden.
          Es ist aber so, daß schlicht und einfach das erste Zeichen als Begrenzer benutzt wird.

          Danke, MudGuard.

          Ich habe die angezeigten Begrenzungszeichen eingefügt, aber falsch, ich erhalte jetzt 'Warning: No ending delimiter '^' found in search.php on line 62'

          Du hast sie falsch eingesetzt, sieh dir doch mal die Beispiele auf
          php.net an.

          $inhalt = preg_replace("^/<!-- NavigationAnfang-->/(.*)./<!-- NavigationEnde-->/$", '', $inhalt);

          "/^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$/"

          einfach _ganz_ am Anfang ein '/' und _ganz_ am Ende ein '/'.
          Ansonsten wie gehabt...

          :-( (Ich weiß, das ist eine schwere Geburt)

          Die Mamma wird's überleben ;-)

          Viele Grüsse

          Philipp

          1. Hallo liebe Forumer!

            Zuerstmal ein zwischenzeitliches Danke für Eure Unterstützung.

            Du hast sie falsch eingesetzt, sieh dir doch mal die Beispiele auf
            php.net an.

            einfach _ganz_ am Anfang ein '/' und _ganz_ am Ende ein '/'.
            Ansonsten wie gehabt...

            Zwischenzeitlich deshalb weil ich es noch immer nicht hinbekomme ..., trotz
             $inhalt = preg_replace("/^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$/", '', $inhalt);

            wird aus $inhalt (s. unten) nicht das Gewünschte rausgeschnitten.

            Beste Grüße
            Viennamade

            ...
            <body>
            <!-- NavigationAnfang-->
                <div id="navig" class="black"><img id="x6bgif" src="graphics/x6b.gif" title="" alt="" /><ul>
            <li><form id="languageform" action="/neu/search.php" method="post"><div><input type="image" src="graphics/x5a.gif" /></div></form></li>
                          <li><a onmouseover="menho(this,'x62.gif')" onmouseout="menho(this,'x61.gif')" id="linkx61" href="index.php"><img id="x61gif" src="graphics/x61.gif" title="Home" alt="Home" /></a></li>
                        <li><a onmouseover="menho(this,'x5e.gif')" onmouseout="menho(this,'x5d.gif')" id="linkx5d" href="cooperate.php"><img id="x5dgif" src="graphics/x5d.gif" title="" alt="" /></a></li>
                        <li><a onmouseover="menho(this,'x66.gif')" onmouseout="menho(this,'x65.gif')" id="linkx65" href="illumination.php"><img id="x65gif" src="graphics/x65.gif" title="" alt="" /></a></li>
                        <li><a onmouseover="menho(this,'x64.gif')" onmouseout="menho(this,'x63.gif')" id="linkx63" href="faq.php"><img id="x63gif" src="graphics/x63.gif" title="" alt="" /></a></li>
                        <li><a onmouseover="menho(this,'x60.gif')" onmouseout="menho(this,'x5f.gif')" id="linkx5f" href="contact.php"><img id="x5fgif" src="graphics/x5f.gif" title="" alt="" /></a></li>

            <li><a onmouseover="menho(this,'x91.gif')" onmouseout="menho(this,'x90.gif')" id="linkx90" href="downloads.php"><img id="x90gif" src="graphics/x90.gif" title="" alt="" /></a></li>
                        <li><form id="formsearchblack" action="search.php" method="post"><ul><li><input type="image" id="search" onmouseover="menho(this,'x68.gif')" onmouseout="menho(this,'x67.gif')" src="graphics/x67.gif" /></li><li><input id="searchvalues" name="searchvalues" size="20" type="text" maxlength="20" /></li></ul></form></li>
                          </ul>
            </div>
            <!-- NavigationEnde-->
            <h2>...

            1. Halihallo Viennamade

              Zwischenzeitlich deshalb weil ich es noch immer nicht hinbekomme ..., trotz
               $inhalt = preg_replace("/^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$/", '', $inhalt);
              wird aus $inhalt (s. unten) nicht das Gewünschte rausgeschnitten.

              http://ch2.php.net/manual/de/pcre.pattern.modifiers.php
              füge hinter den s modifier dazu. Dies führt dazu, dass Zeilenumbrüche
              ebenfalls von '.' (oder "(.*)") "gematched" werden und das
              "NavigationsEnde" überhaupt erst "erreicht" wird.

              Viele Grüsse

              Philipp

              1. Halihallo

                Zwischenzeitlich deshalb weil ich es noch immer nicht hinbekomme ..., trotz
                 $inhalt = preg_replace("/^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$/", '', $inhalt);
                wird aus $inhalt (s. unten) nicht das Gewünschte rausgeschnitten.

                http://ch2.php.net/manual/de/pcre.pattern.modifiers.php
                füge hinter den s modifier dazu. Dies führt dazu, dass Zeilenumbrüche
                ebenfalls von '.' (oder "(.*)") "gematched" werden und das
                "NavigationsEnde" überhaupt erst "erreicht" wird.

                Äm, ja, also einfach:
                $inhalt = preg_replace("/^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$/s", '', $inhalt);

                Viele Grüsse

                Philipp

                1. Hallo liebe Forumer!

                  Zwischenzeitlich deshalb weil ich es noch immer nicht hinbekomme ..., trotz
                  $inhalt = preg_replace("/^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$/", '', $inhalt);
                  wird aus $inhalt (s. unten) nicht das Gewünschte rausgeschnitten.

                  http://ch2.php.net/manual/de/pcre.pattern.modifiers.php
                  füge hinter den s modifier dazu. Dies führt dazu, dass Zeilenumbrüche
                  ebenfalls von '.' (oder "(.*)") "gematched" werden und das
                  "NavigationsEnde" überhaupt erst "erreicht" wird.

                  Äm, ja, also einfach:
                  $inhalt = preg_replace("/^<!-- NavigationAnfang-->(.*).<!-- NavigationEnde-->$/s", '', $inhalt);

                  Nicht ganz (sicher mangels korrekter Darstellung meinerseits), nach einigen Tests funktioniert jetzt das:
                       $inhalt = preg_replace("/<!-- NavigationAnfang-->(.*)<!-- NavigationEnde-->/ms", '', $inhalt);

                  Es war sicher falsch mich gestern als RegExp-Frischling hier an Euch zu wenden, habe aber bereits begonnen Christian Kruses Statement an mich
                       'Lies doch einfach mal das Manual, Mensch ;-)'
                  umzusetzen.

                  Recht herzlichen Dank an alle,
                  Viennamade

    2. yo,

      REM gibt's nur bei BASIC und im Schlaf ;-)

      oder hängt an der wand, ein gemeiner REMbrand...

      Ilja

      1. Halihallo llja

        REM gibt's nur bei BASIC und im Schlaf ;-)
        oder hängt an der wand, ein gemeiner REMbrand...

        Der ist auch gut ;)

        Und hat's mit dem 's' hingehauen?

        Viele Grüsse

        Philipp