Nee, tut er doch nicht...( Muss zu meiner Schande gestehen, daß ich die Syntax auch erst noch mal nachlesen musste...)
Mir der Aufgabe hab ich mir jetzt selber ein Bein gestellt: ich kann zZ leider nur die Perl - Lösung anbieten - in Bezug auf php fehlen mir da noch Kentnisse ( und hab gerade auch keine Zeit zum Experimentieren ). Aber vielleicht kriegt's einer der php-Gurus ja hin...
Aaaalso, die Perl-Lösung:
while ($String =~ m/<a.+?href=['"]?(http[s]?|ftp):\/\/([^\/ "']+)/g) {
print "Protokoll: $1\nDomain: $2\n";
}
Was hat sich geändert? Nach dem ersten Wiederholer-+ wurde ein Fragezeichen ? eingefügt und die ganze regexp in eine Schleife gepackt. Und das ist alles?!?
Nun, regexp sind im Normalfall "gierig" - sie liefern den grösstmöglichen bzw letztmöglichen Treffer zurück. Das waren in unserem Beispiel die Daten des zweiten Links. Um das zu unterdrücken und die regexp gleich beim ersten Treffer aufhören zu lassen, langt es, ein Fragezeichen hinter dem (ersten ) Wiederholungswert zu setzen. Dann gibt die regexp den erstmöglichen Treffer zurück.
Und die Schleife? Nun, eine regexp hat eine Art "Kurzzeitgedächtnis". Solange keine andere regexp aufgerufen wird oder die Suchbedingung geändert wird, "merkt" sie sich, wo sie war und macht beim nächsten Aufruf an der Folgestelle weiter.
That's it...


LinkBack URL
About LinkBacks
Zitieren
)