ModMoc: PHP -> Regex Problem !

Hallo Gemeinde,

folgenden String(ohne Zeilenumbrüche(\n)) erhalte ich:

$string = '<div><a href="#">Links 1</a></div><div><a href="#">Link 2</a></div><div><a href="#">Link 3</a></div><div><a href="#">Link 4</a></div>';

und mit dieser Regex:

preg_match_all('/<a href="(#)">.*<\/a>/', $string, $matches);

möchte ich den Inhalt des "href" Attribute matchen!

======================
Wünsch Ergebniss:

Array
(
    [0] => 'Links1'
    [1] => 'Links2'
    [0] => 'Links3'
    [0] => 'Links4'
}

Folgendes wird mir aber ausgegeben:

Array
(
    [0] => '<a href="#">Test 1</a></div><div><a href="#">Test 2</a></div><div><a href="#">Test 3</a></div><div><a href="#">Test 4</a>'
    [1] => '#'
}

=====================

Was mache ich falsch?

Gruß

ModMoc

  1. Was mache ich falsch?

    Du probierst einfach "Stundenlang herum" anstatt "5 Minuten das Handbuch zu lesen" bzw. dich mit den Grundlagen zu beschäftigen.

    Für diesen Fall ist übrigens ein XML oder HTML-Parser besser geeignet - den Inhalt des href-Attributs matchen ist nicht so einfach wie es sich auf den ersten Blick anhört - und dabei sind wir noch nichtmal ansatzweise dabei, einen URL aus dem Wert des href-Attributs zu extrahieren.

    1. Hallo,

      Du probierst einfach "Stundenlang herum" anstatt "5 Minuten das Handbuch zu lesen" bzw. dich mit den Grundlagen zu beschäftigen.

      folgende Manuels habe ich gelesen:

      http://php.net/manual/en/function.preg-match-all.php
      http://php.net/manual/de/reference.pcre.pattern.modifiers.php

      Für diesen Fall ist übrigens ein XML oder HTML-Parser besser geeignet - den Inhalt des href-Attributs matchen ist nicht so einfach wie es sich auf den ersten Blick anhört - und dabei sind wir noch nichtmal ansatzweise dabei, einen URL aus dem Wert des href-Attributs zu extrahieren.

      1.) XML oder HTML-Parser: vielen Dank, werde ich ausprobieren :)
      2.) Ich weis das ein <a> -tag in den verschiedensten Variationen aufgebaut sein kann. Allerdings erhalte ich den String immer im gleichen Format! Daher wollte ich das mit einem Regex matchen.

      Gruß

      Serkan Sipahi

      1. 2.) Ich weis das ein <a> -tag in den verschiedensten Variationen aufgebaut sein kann. Allerdings erhalte ich den String immer im gleichen Format! Daher wollte ich das mit einem Regex matchen.

        Ich will garnicht wissen wie oft ich schon gehört habe "dass das immer im gleichen Format sein wird" :)

        1. Ich will garnicht wissen wie oft ich schon gehört habe "dass das immer im gleichen Format sein wird" :)

          In diesem Fall ist zu 100%, im gleichem Format. Glaube mir :)

          1. Ich will garnicht wissen wie oft ich schon gehört habe "dass das immer im gleichen Format sein wird" :)

            In diesem Fall ist zu 100%, im gleichem Format. Glaube mir :)

            Du wirst nicht glauben wie oft ich das schon gehört habe :D

            1. Du wirst nicht glauben wie oft ich das schon gehört habe :D

              Das glaube ich dir :)

    2. Hallo,

      Für diesen Fall ist übrigens ein XML oder HTML-Parser besser geeignet - den Inhalt des href-Attributs matchen ist nicht so einfach wie es sich auf den ersten Blick anhört - und dabei sind wir noch nichtmal ansatzweise dabei, einen URL aus dem Wert des href-Attributs zu extrahieren.

      Problematisch:

      $dom = new DOMDocument();
      $dom->loadHTML($string);
      $res = $dom->getElementsByTagName('a');

      weil: "Unlike loading XML, HTML does not have to be well-formed to load" !

      ====================

      besser http://simplehtmldom.sourceforge.net/ weil: Eine Besonderheit dabei ist, dass auch nicht valides HTML Markup unterstützt wird.

      ====================

      vielen Dank nochmal :)

      Gruß

      ModMoc

      1. besser http://simplehtmldom.sourceforge.net/ weil: Eine Besonderheit dabei ist, dass auch nicht valides HTML Markup unterstützt wird.

        Nicht valides HTML zu unterstützen ist nicht unbedingt besser - da sie, obwohl die Fehlerkorrektur mittlerweile "halbwegs definiert" ist, immer noch zu unerwarteten Konsequenzen führen können.

        Valides HTML oder noch besser XHTML elimieren hier potentielle Fehlerquellen und erleichtern das parsen.

        Das kommt natürlich drauf an, ob du auch an der Datenquelle Hand anlegen kannst.

        1. Das kommt natürlich drauf an, ob du auch an der Datenquelle Hand anlegen kannst.

          leider nicht :(

      2. Hi,

        weil: "Unlike loading XML, HTML does not have to be well-formed to load" !

        bist du sicher, dass du den Satz richtig verstanden hast?
        "Anders als beim Laden von XML muss HTML nicht [unbedingt] wohlgeformt sein, um es laden zu können."

        Valide sollte es aber vermutlich schon sein. Nur ist HTML -im Gegensatz zu XHTML- sehr tolerant im Bezug auf Schreibweise, optionale vs. notwendige Angaben, so dass selbst korrektes HTML ziemlich anspruchsvoll zu parsen ist, wenn es solche syntaktischen Freiheiten ausnutzt.

        besser http://simplehtmldom.sourceforge.net/ weil: Eine Besonderheit dabei ist, dass auch nicht valides HTML Markup unterstützt wird.

        Das klingt interessant. *bookmark*

        Ciao,
         Martin

        --
        Wenn man keine Ahnung hat - einfach mal Fresse halten.
          (Dieter Nuhr, deutscher Kabarettist)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. @@Der Martin:

          nuqneH

          "Anders als beim Laden von XML muss HTML nicht [unbedingt] wohlgeformt sein, um es laden zu können."
          Valide sollte es aber vermutlich schon sein.

          Ist Wohlgeformtheit nicht Voraussetzung für Validität?

          Und spricht man im HTML-/SGML-Kontext überhaupt von Wohlgeformtheit?

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Ist Wohlgeformtheit nicht Voraussetzung für Validität?

            Würde ich schon sagen, ja:
            http://www.w3.org/TR/REC-xml/#sec-well-formed

            Und spricht man im HTML-/SGML-Kontext überhaupt von Wohlgeformtheit?

            Die en-Wikipedia hat einen Artikel hierzu - der ist aber nicht belegt und sieht mir nach original research aus.

            Wohlgeformtheit im Kontext HTML/SGML habe ich noch nicht gehört oder gelesen - wäre auch absurd, weil in SGML so viele "sonderregeln" erlaubt sind, dass selbst syntaktisch einwandfreie Dokumente als "Chaos" interpretiert werden können und sicher nicht "Wohlgeformt" aussehen.

          2. Hallo,

            "Anders als beim Laden von XML muss HTML nicht [unbedingt] wohlgeformt sein, um es laden zu können."
            Valide sollte es aber vermutlich schon sein.
            Ist Wohlgeformtheit nicht Voraussetzung für Validität?

            hmm, ich geh nochmal nachlesen ... okay, Punkt für dich. Ich war auf dem Trip, dass Wohlgeformtheit zusätzlich zur generischen Validität von XML die Übereinstimmung mit einer *bestimmten* DTD sei.

            Und spricht man im HTML-/SGML-Kontext überhaupt von Wohlgeformtheit?

            Wohl eher nicht. Dann ist die obige übersetzte Aussage natürlich sowieso sinnlos.

            Ciao,
             Martin

            --
            Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(