WiMu: Hilfe bei regulärem Ausdruck

Hallo liebes Forum,

mit regulären Ausdrücken stehe ich auf Kriegsfuß ... dieses Vieh (das nicht von mir stammt) soll URLs als solche erkennen und automatisch in links umwandeln - was es auch einigermaßen tut:

$pattern = '/(((f|ht){1}tp(s){0,1}:\/\/)[-a-zA-Z0-9@:%_\+.;,~#?&\/\/=]+)/i';  
$replacement = '<a href="\\1" target="_blank">\\1</a>';  
$text = preg_replace($pattern, $replacement, $text);

Doof aber, wenn der Text bereits manuell eingefügte links enthält - also z.B.

foo <a href="http://bar.de">bar.de</a>

... dann wird daraus

foo <a href="<a href="http://bar.de" target="_blank" ...

oder ähnliches. Habe schon alles mögliche ausprobiert, mit (?!<a href=") vornedran beispielsweise, aber nichts funktioniert so wie es soll. Leider kann ich nicht einfach Leer- oder Satzzeichen matchen, weil u.A. auch URLs in Klammern verlinkt werden sollten.

Wäre super, wenn ihr mir helfen könntet. Habe mich schon durch alle möglichen RegEx-Bibliotheken gequält, aber kein Ausdruck passt ...

Dank und Grüße,
WiMu

  1. hm ... scheint, als habe ich selbst eine Lösung gefunden (*stolzbin*). Ich hatte die ganze Zeit Lookahead und Lookbehind verwechselt - das da tut bislang das, was ich will:

    $pattern = '/((?<![\"])((f|ht){1}tp(s){0,1}:\/\/)[-a-zA-Z0-9@:%_\+.;,~#?&\/\/=]+)/i';  
    $replacement = '<a href="\\1" target="_blank">\\1</a>';  
    $text = preg_replace($pattern, $replacement, $text);
    

    Grüße und trotzdem Danke,
    WiMu

    1. @@WiMu:

      nuqneH

      hm ... scheint, als habe ich selbst eine Lösung gefunden (*stolzbin*). Ich hatte die ganze Zeit Lookahead und Lookbehind verwechselt - das da tut bislang das, was ich will:

      [code lang=php]$pattern = '/((?<!["])((f|ht){1}tp(s){0,1}://)[-a-zA-Z0-9@:%_+.;,~#?&//=]+)/i';

      Ich weiß nicht, warum du IRIs wie http://müller.example oder http://example.net/das-wandern-ist-des-müllers-lust von der Erkennung ausschließen willst.

      Sinnvoll scheint mir das nicht zu sein.

      Qapla'

      PS:'ftps://'  am Anfang erlaubt? Gibt es ein solches Protokoll?

      PPS: {0,1}? Wer schreibt denn sowas? Fragezeichen?

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      1. PS:'ftps://'  am Anfang erlaubt? Gibt es ein solches Protokoll?

        PPS: {0,1}? Wer schreibt denn sowas? Fragezeichen?

        Wer sowas schreibt? Der Chef unserer IT ... und das da oben ist noch ein harmloses Beispiel für den Schrott, mit dem ich mich rumärgern muss ...

        Grüße und Danke,
        WiMu

      2. Moin Gunnar,

        PS:'ftps://'  am Anfang erlaubt? Gibt es ein solches Protokoll?

        Jain. Als FTPS wird FTP über SSL bezeichnet. Das Schema gibt es offiziell nicht wird aber trotzdem gerne verwendet, es gibt sogar Clients die dafür Handler implementieren.

        LG,
         CK

      3. Hi,

        [code lang=php]$pattern = '/((?<!["])((f|ht){1}tp(s){0,1}://)[-a-zA-Z0-9@:%_+.;,~#?&//=]+)/i';

        PPS: {0,1}? Wer schreibt denn sowas? Fragezeichen?

        Naja, wer {1} schreibt, muß konsequenterweise auch {0,1} schreiben ;-)

        Und auch den Slash doppelt in die Zeichenklasse aufnehmen.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.