Regulärer Ausdruck funktioniert nicht

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

  • Regulärer Ausdruck funktioniert nicht

    Hallo zusammen,

    habe einen HTML-Code, aus welchem ich ein Stück "herausschneiden" möchte. Dies versuche ich mittels einer geeigneten RegExp zu bewerkstelligen.



    Ich möchte genau das "behalten" bzw. in einer neuen Variable/Array speichern, was zwischen

    Code:
    <div id='inhalt2' class='s'>
    und
    Code:
    </div><br />
    steht. Das sind also meine "Grenzen" (die aber selbst auch aufgenommen werden sollen).



    Mit Hilfe des RegExp-Evaluators habe ich den Regulären Ausdruck
    Code:
    !<div id='inhalt2' class='s'>.*</div><br />!is
    herausbekommen.



    Das funktioniert prima. Aber: wenn ich das ganze jetzt in PHP implementiere, klappt es nicht mehr:

    PHP-Code:
    $regexp "!<div id='inhalt2' class='s'>.*</div><br />!is";
    preg_match_all($regexp$input$outputPREG_PATTERN_ORDER); 
    ==> da erscheint dann lediglich "Array" im Browser. Heißt das, dass kein match gefunden wurde? Oder habe ich etwas falsch gemacht? Bin ratlos.

    Kann mir jemand von euch weiterhelfen?

    Vielen Dank und viele Grüße,
    Chris

  • #2
    Du hast auch keine Capturing Group, also nichts definiert, das gefunden werden soll. Versuchs mal so:
    Code:
    <div id='inhalt2' class='s'>(.*?)</div><br />
    Das Ergebnis steht dann in $output[1] bereit. Übrigens: Die Flag PREG_PATTERN_ORDER musst du nicht explizit setzen, es ist die Default Flag.
    Zuletzt geändert von Griecherus; 25.03.2008, 13:43.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      @Griecherus: habs hinbekommen!

      Was ich gemacht habe: einfach statt

      echo $output[0]

      echo $output[0][0] geschrieben.

      Nun gut, es funktioniert, aber kann mir das jemand erklären?? Warum zweidimensionales Array??

      EDIT:

      Aaaaahhhh, lese jetzt erst den "zweiten Teil" deines Posts, Griecherus. Super! Das kann ich gut nachvollziehen!! So mache ich es jetzt! Vielen Dank für deine Hilfe!!!

      Kommentar


      • #4
        Noch als kleiner Ratschlag: Wenn du mit Arrays arbeitest, und die Arrays testweise ausgeben oder einfach nur überprüfen möchtest, ob bestimmte Werte gesetzt sind oder das Array leer ist, ist ein
        PHP-Code:
        echo '<pre>';
        print_r($array);
        echo 
        '</pre>'
        einem simplen echo in vorzuziehen. Damit wird dir das gesamte Array strukturiert ausgegeben und man kann sich so manche Kopfschmerzen mit einem Auf-gut-Glück-echo+Array-Key ersparen

        Grüße
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          Mit deinem Aufruf von preg_match_all() wird ein Array mit den Ergebniswerten zurückgegeben.
          In deinem Fall hast du keine Subpatterns, deswegen stehen die Ergebnisse im ersten Element -> $output[0]

          Nachdem du wohl auch nur ein Ergebnis bekommen wirst, kannst du auf deinen gefundenen Text direkt mit $output[0][0] zugreifen.

          PS: print_r() und var_dump() sind deine Freunde.

          Edit: Vergesst den Post, war zu langsam.

          Kommentar


          • #6
            Original geschrieben von squirrelcgn
            Warum zweidimensionales Array??
            preg_match() füllt einen Array mit den Resultaten eines Treffers. Und preg_match_all() macht das mit allen Treffern und bildet dann daraus ein neues, zweidimensionales Array
            Gruss
            H2O

            Kommentar


            • #7
              Leute, es ist eine helle Freude!! :-)

              Vielen Dank an alle!!

              Kommentar

              Lädt...
              X