Frank Schönmann: Hilfe bei regulärem Ausdruck

Beitrag lesen

hi!

Du kannst deinen regulären Ausdruck mit runden Klammern so gliedern, dass du
Referenzen erhaelst.
Wäre in Deinem Fall also http, gefolgt von eine s, das ein - oder keinmal vorkommt,
gefolgt von ://, gefolgt von irgendwas, das beliebig oft vorkommt, gefolgt von
Leerzeichen.
Das sieht etwa so aus: (http[s]?://)(.*)( ). Die Referenz auf die erste Klammer
enthaelt http:// oder https://, die zweite www.google.com und die dritte das
Leerzeichen, damit du weisst, wo dein </a> hinkommt.
An dem Ausdruck kann man sicher noch schrauben, mir geht's hier nur ums Prinzip.

Man kann nicht nur, sondern man muss. So funktioniert er naemlich nicht: . matcht
naemlich auf alles, auch auf Leerzeichen. Und da der Ausdruck durch den * gierig wird,
wuerde dein (sinnloserweise geklammertes) Leerzeichen erst auf das allerletzte im
Text matchen, das (.*) dagegen auf jede Menge Quatsch dazwischen.

Richtig waere beispielsweise: (https?://.*?)\s, wo einfach die Gierigkeit des
Teilausdrucks eingeschraenkt wird. Die Referenz auf die Klammer enthaelt dann die
gesamte Adresse.

Wenn man das Problem richtig loesen will gibt es allerdings noch andere Dinge zu
beachten, z.B. muessen in einem Text ja solche Adressen nicht unbedingt mit einem
Leerzeichen abgeschlossen werden, sondern koennten auch von Satzzeichen oder
anderen HTML-Tags gefolgt werden. Und zusaetzlich koennte man noch eine tiefer
gehende Ueberpruefung einbauen, ob es sich tatsaechlich um eine korrekte Adresse
handelt, weil obige Methode auch beliebig viele falsche Adressen erkennen wuerde.

bye, Frank!

--
Never argue with an idiot. He will lower you to his level and then
beat you with experience.