Hilfe bei regulärem Ausdruck
Daniel
- perl
Hallo ihr!
Ich hab nen Text,... und da sind stellenweise Webadressen drinnen. Sowas:
... und das gibts auf http://www.google.com und so weiter...
Der Text sollte nachher so aussehen:
... und das gibts auf <a href="http://www.google.com">www.google.com</a> und so weiter...
Kann man das mit einem regulären Ausdruck irgendwie machen, es können verschieden viele Adressen sein.
Oder sonst irgendwie?
Wäre klasse!
Daniel
Hallo Daniel,
Wie man das genau in Perl macht, weiss ich nicht, weil ich eher zur PHP-Fraktion zaehle ;-)
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.
Der RegExCoach ist uebrigens eine feine Sache in solchen Faellen.
Dieter
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!
Hallo Daniel,
... und das gibts auf http://www.google.com und so weiter...
Der Text sollte nachher so aussehen:
... und das gibts auf <a href="http://www.google.com">www.google.com</a> und so weiter...
Das gleiche Thema, wenn auch mit PHP, findest Du in folgendem Thread: https://forum.selfhtml.org/?t=92136&m=554843. Bitte schau' doch mal in die von Götz verlinkte dclp FAQ 8.12. Wie mache ich aus URIs im Text anklickbare Links rein. Das sollte Dir einige Anhaltspunkte geben.
Freundliche Grüsse,
Vinzenz