Links aus HTML-Datei auslesen

Mmmmh...du beschreibst so detailgetreu, wie die Links aufgebaut sind.
Wenn du wirklich alle Links haben willst, ist das nicht so wichtig....
Code:
preg_match_all('/<a\s[^>]*href=".*([^\/]+)"/iU',$text,$out);
..das findet alle Dateinamen in verlinkten Adressen.

Erläuterung dazu:
gesucht wird
  • <a
    <a
  • \s
    gefolgt von einem Leerzeichen
  • [^>]*
    gefolgt von beliebig vielen Zeichen, welche keine schliessende Klammer sind
  • href="
    gefolgt von href="
  • .*
    gefolgt von beliebig vielen beliebigen Zeichen
  • (
    Erzeugen einer Referenz, welche später unter $out[1]erreichbar ist
  • [^\/]+
    gefolgt von 1 oder mehr Zeichen, welche kein Slash sind
  • )
    beenden der Referenz
  • "
    gefolgt von "
  • i
    das Suchmuster ignoriert Gross/Kleinschreibung
  • U
    das Suchmuster ist Ungreedy(nicht gierig)... findet also die erste Übereinstimmung, nicht die maximal ermittelbare

Falls du doch nur bestimmte Links entsprechend deiner Beschreibung suchst, sag Bescheid;)
 
Zuletzt bearbeitet:
fatalus hat gesagt.:
Falls du doch nur bestimmte Links entsprechend deiner Beschreibung suchst, sag Bescheid;)

Erstmal danke für die Erläuterung. Ich hab mich mal schlau gemacht und rausgefunden, dass ich mich mal näher mit regulären Ausdrücken beschäftigen sollte.

Wie sähe dann der Code nach preg_match_all aus, wenn ich alle Dateinamen möchte, die ein TB_Partner_Hersteller als letztes Unterverzeichnis vor dem eigentlichen Dateinamen haben?

Im Prinzip wäre das ja wie dein Beispiel mit "zip", aber scheinbar gibt es Probleme mit den Unterstrichen :(
 
Das sollte so laufen:
Code:
preg_match_all('/<a\s[^>]*href=".*TB_Partner_Hersteller\/([^\/]+)"/iU',$text,$out);
der Unterstrich ist egal...der hat in RegExp keine besondere Bedeutung
 
Funktioniert super. Danke.

Ich versuche gerade, hinter die ganze Sache zu steigen.

Ich will das Skript jetzt auch über andere Seiten laufen lassen. Es gibt ungefährt ein Dutzend Varianten, welches Verzeichnis im Pfad vor dem Dateinamen steht. Im obigen Fall ist das ja "TB_Partner_Hersteller". Angenommen es gibt da alternativ das Verzeichnis "_zip" und "TB_sonstige". Ich weiß, dass man Alternativen mit | trennt. Aber dann muss ich den Ausdruck doch sicher in Klammern oder so setzen, oder?

Mit

preg_match_all('/<a\s[^>]*href=".*TB_Partner_Hersteller\/|.*_zip\/([^\/]+)"/iU',$text,$out);

zeigt er nur die Links mit "_zip" im Pfad an.

Alternativ hab ich versucht, eine Gemeinsamkeit aller Varianten zu finden. Das wäre das Verzeichnis "PFW" im Pfad. Allerdings folgen nach "PFW" noch weitere Unterverzeichnisse, sodass ich deinem Code und "PFW" statt "TB_Partner_Hersteller" nicht weiterkomme, denn - und das habe ich gelernt :) - danach folgen ja noch Slashes. Im Code ist das aber ausgeschlossen :(

Edit: Letzteres hab ich hinbekommen:

preg_match_all('/<a\s[^>]*href=".*PFW\/.*([^\/]+)"/iU',$text,$out);

Ich bin echt dankbar, dass du mir hilfst :)
 
Zuletzt bearbeitet:
Zurück