Ana: Links finden

Hallo,

ich habe eine String in dem viele Links vorkommen, wie z.B. dieser hier:

<a href="/file.php?lg=us&id=3264" class="last">download</a>

ich möchte mit preg_match_all() alle "file.php?lg=us&id=xxxx" herrausfinden.
Ich habe bis jetzt nur mit strpos und substr gearbeitet, kann mir jemand ein passendes Beispiel, oder sogar den fertigen Ausdruck geben?

Liebe Grüße, Ana

  1. Hello,

    ich habe eine String in dem viele Links vorkommen, wie z.B. dieser hier:

    <a href="/file.php?lg=us&id=3264" class="last">download</a>

    ich möchte mit preg_match_all() alle "file.php?lg=us&id=xxxx" herrausfinden.

    Guck mal, ob Dir das weiterhilft

    $_a = array();

    //              1          2        3          4            <5>           6           7
      $pattern = '=^(.*?)(<area|<a|<img)(.*?)(href=|src=)"|'"|'(>.*$|>.*?</a>.*$)=msi';

    $anz = preg_match_all($pattern, $page, $_a))

    in $_a[4][$i] müssten dann die gesuchten Teile stehen... (hoffe ich)

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Hello,

      ich habe noch ein wenig damit herumgebastelt.

      $page = file_get_contents('http://forum.de.selfhtml.org/');
        $_urls = array();

      $pattern = '=<a.*?href=("|')?([^"']*)\1[^>]*>=i';

      preg_match_all($pattern, $page, $_urls);

      echo "<pre>\n";
        echo htmlspecialchars(print_r($_urls,1));
        echo "</pre>\n";

      Das funktioniert zwar, ist aber bestimmt nicht wirklich richtig

      <a           genau finden
      .*?          weiterlesen, aber nicht "greedy", Zeichen ist egal, aber kein Zeilenumbruch [1]
      href         genau finden
      =           genau finden, escaped, weil = als Pattern-Begrenzung benutzt wurde
      ("|')?      keinmal bis einmal ein doppeltes oder ein einfaches Häkchen
                     das einfache escaped für PHP, als Treffergruppe zusammengefasst
                     für Backreferenz
      ([^"']*)    gesuchte Daten, als Treffergruppe gebunden  ()
         [^"']*   darf kein doppeltes und kein einfaches Häkchen sein.
                     einfaches wieder für PHP escaped, beliebig oft
                     Hier hätte ich nun auch gerne die Backreferenz benutzt, geht aber nicht :-((
      \1           genau suchen, das Häkchen, mit dem der String begonnen wurde
                     Backreferenz auf erste Treffergruppe
      [^>]*        keine spitze Klammer, beliebig oft

      Spitze Klammer genau finden

      Ich wüsste gerne, wie man auch in der Zeichenklasse [^"'] die Backreferenz nutzen könnte
      und ausßerdem natürlich, wie das Gesamtkunstwerk richtig wäre und warum...

      [1] über den Zeilenumbruch hinwegzulesen, wäre hier sicher besser ...

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)