Per RegEx bestimmten Code extrahieren

Benzol

Erfahrenes Mitglied
Hallöchen,
mich würde interessieren, wie ich es erreiche, das ich eine Liste aller <a>-Tags aus einem HTML Dokument bekommen kann. Ich probiere jetzt schon seit einiger Zeit rum, habe aber leider keine Sinnvollen ergebnisse erziehlen können. Ziel ist es, so lange die Seite zu durchlaufen, bis keine <a>-Tags mehr geufnden wurden sind.

Habe schon damals Probleme gehabt, wo ich noch mit ASP.Net gearbeitet habe... grauselig diese dinger. ;)
 
Jo, eigentlich ganz einfach :D

PHP:
<?php 

preg_match_all('/<a.*?href=([\'"])([^\1]+?)\1/', $var, $match);
print_r($matches); 

?>
Wobei das recht vereinfacht ist. Behandelt z.B. nicht den Fall, dass um die URL beispielsweise gar keine Anführungszeichen stehen, was zwar nicht unbedingt HTML-Konform ist, aber durchaus vorkommen kann.

Für gewöhnlich empfiehlt sich bei sowas dann ein HTML-Parser der nach gültigen Spezifikationen das Dokument in entsprechende Tokens zerlegt. Aber weis nicht ob es da was praktikables für PHP gibt.
 
Ich danke dir vielmals. Mehr brauche ich garnicht. Da ich dammit nur meine eigenen Link extrahiere, die sowieso möglichst HTML-Konform geschrieben sind, sollte da keine Probleme geben.

Nachtrag:
Ghandi... deine Ausdruck gibt mir <a href='http://www.blub.e' zurück. Ich würde aber gerne nur die URL ohne den Tag haben. Wie müsste man das umschreiben?
 
Zuletzt bearbeitet:
Der Regex passt, du holst dir nur das falsche Ergebnis ;)

PHP:
echo $matches[2][0];

Deshalb hab ich ja extra die Ausgabe zunächst über print_r gemacht, damit ersichtlich wird, in welcher Daten-Struktur der tatsächliche Treffer hinterlegt wird. ;)
 
Ja, das habe ich letztentlich auch erkannt. Seit ich mir aber aber den Quellcode der Seite per POST übergeben lasse, schaut die Struktur so aus:
Code:
Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) )
Am anfang habe ich nur die URL übergeben und dann die Datei geladen.
Habe den String extra Gestripedslashed ( ;) ), aber mit deinem Ausdruck will es einfach nicht.
Der andere Ausdruck funktioniert... ich weis nicht so recht, was ich jetzt falsch gemacht habe :confused:
 
Für den RegEx ist es nicht von Bedeutung, ob er per POST oder GET aufgerufen wird. Schlislich hat er damit absolut gar nichts zu tun. Vermutlich ist dann irgendwo in deinem Script ein Ablauffehler. Kommt denn das zu durchsuchende HTML-Dokument überhaupt beim RegEx an? Schlieslich kann er nur etwas finden, wenn er auch etwas bekommt. Desweiteren lohnt es sich sicherlich dann auch mal einen Blick in den Queltext zu werfen, den man dem RegEx zum fressen vorwirft. Weil wie gesagt ist das kein Ausdruck der sich anschickt alle möglichen Kombinationen die auftreten können zu erfassen.

Für mich ist die oberste Regel bei sowas, einfach überall wo es sinn macht und man sich auf Werte in Variabeln verlässt, diese einfach mal auszugeben und zu schauen, ob tatsächlich drinsteckt, wovon man glaubt was drinstecken sollte ;)
 
Jo, habe ich alles schon untersucht. Der Quelltext der übergeben wird wird korrekt übergeben und kommt beim RegEx an. Wenn ich mir alles ausgeben lasse, dann bekomme ich die komplette Seite auf der Seite eingefügt... der Quellcode ist identisch mit dem Orginal.
Wo kann der Fehler da noch liegen?

Quellcode sieht so aus:
PHP:
	//Den Code der Seite lesen
	$content = 	stripslashes($_POST['page']);

	preg_match_all('/<a.*?href=([\'"])([^\1]+?)\1/', $content, $match);
	print_r($match);
 
Zuletzt bearbeitet:
Ja dann matcht wohl einfach der RegEx nicht. :D

Die Frage ist dann halt warum, kannste nicht mal nen Beispiel aus dem HTML-Code zeigen, wie dort die a-Tags so aussehen?
 
Zurück