Daniel: Hilfe bei regulärem Ausdruck

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

  1. 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

    1. 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.
  2. 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