Tom: Regular Expressions, immer noch falsch...

Beitrag lesen

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 :-)