Um einen Link aus einem HTML-Dokument auszufiltern, muß man sich zunächst über den
Aufbau eines Verweises Gedanken machen. Klar, er fängt mit einem
<A an - aber dann? Die href-Angabe muß nicht zwingend als erster Parameter angegeben werden. Also müssen wir unserer regexp zunächst sagen: "Suche dir das
<a und überspringe beliebig viele Zeichen bis zum Text
href":
/<a.+href=/
Gut. Bei einem korrekt geschriebenem Code seht der Link in Hochkommata - aber nicht
jeder Code ist korrekt geschrieben

. Man kann aber davon ausgehen, daß der Link spätestens beim nächsten Blank oder beim schliessenden
> endet - diese Zeichen also nicht enthält. Zusätzlich müssen wir berücksichtigen, daß sowohl einfache als auch doppelte Hochkommata möglich sind...
/<a.+href=['"]?([^'"> ]+)/
In der "Treffer-Variablen sollte nun der komplette Link stehen. Wir wollen aber nicht den Link, sondern nur die Domain. Also muß dieser Treffer weiter aufgedröselt werden. Wie Holunda schon richtig formuliert hat, müssen wir zwischen
http und
ftp untescheiden. Vorsichtshalber nehmen wir noch die https-Option mit:
/<a.+href=['"]?(http[s]?|ftp):\/\/([^'"> ]+)/
Das Fragezeichen in unserer neuesten Zufügung bezieht sich
nur auf das
s!
Da hätten wir's doch schon fast! Die Bedingung der zweiten Klammer muss nur noch um ein
/ erweitert werden, dann wird beim ersten Slash
/ - wenn Unterverzeichnisse angegeben wurden - gestoppt. Wenn kein Unterverzeichnis angegeben wurde, wird der ganze Linktext übergeben:
/<a.+href=['"]?(http[s]?|ftp):\/\/([^\/ "']+)/
Indexwert-1 = Protokoll
Indexwert-2 = Domain
Das Teil ist noch nicht perfekt - Stuck Mojo findet garantiert wieder einen Pfad, der nicht passt..

- aber im Normalfall sollte es passen.