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