Tenni: Reg Exp: URL

Hallo,

mit folgender REG EXP möchte ich alle URLs in einem Text finden.

w{3}.?\S+|http://.+\S+

Diese liefert mir aber auch Ergebnisse wie:

www.example.org.

Weil im Text eben danach ein Punkt kommt.
Ich gebe an dass als letztes Zeichen ein Zeichen nur kein Whitespace kommen darf. Wie kann ich nun verneinen dass am Ende !?:;- etc. mit übernommen werden?

Danke für die Hilfe

Tenni

  1. Hi,

    mit folgender REG EXP möchte ich alle URLs in einem Text finden.

    Schritt eins: Vermutung, dass du vielleicht nicht der erste Mensch in der Geschichte sein könntest, der ein solches Vorhaben hat.

    Schritt zwei: Suche, wie andere das Problem gelöst haben - http://www.google.com/search?q=regex+url

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Schritt eins: Vermutung, dass du vielleicht nicht der erste Mensch in der Geschichte sein könntest, der ein solches Vorhaben hat.

      Schritt zwei: Suche, wie andere das Problem gelöst haben - http://www.google.com/search?q=regex+url

      Hi,

      vielleicht geht es mir auch allgemein um das Verständnis und nicht nur um eine Lösung zu finden?

      Danke.
      T

      1. Hi,

        vielleicht geht es mir auch allgemein um das Verständnis und nicht nur um eine Lösung zu finden?

        Vielleicht beschäftigst du dich dann mal mit den Grundlagen von Regulären Ausdrücken, und arbeitest ein paar Tutorials durch ...?

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. vielleicht geht es mir auch allgemein um das Verständnis und nicht nur um eine Lösung zu finden?

        Grundsätzlich stimme ich ChrisB zu - ein Tutorial durchzuarbeiten ist sicher kein Fehler.

        Ergänzend dazu ist aber zu sagen, dass besonders in so einem Fall ein wahres Codemonster entsteht - RFC-konforme Validierung von URLs oder E-Mail-Adressen ist keine Geschichte die man mal einfach in ein paar Zeilen erklärt und auch keine, die auf Anhieb funktioniert.

        Deine Art der Fragestellung deutet darauf hin, dass dir in erster Linie die Grundlagen fehlen, du aber gleich ein komplexes Thema lösen willst.

        Eine Analogie:
        Jemand der nicht verstanden hat wie die Kraftverhältnisse zweier Zahnräder ausgerechnet werden, möchte erklärt bekommen wie ein 7-gängiges Planetengetriebe funktioniert.

  2. Wie kann ich nun verneinen dass am Ende !?:;- etc. mit übernommen werden?

    mittels negierter Zeichenklasse
    \S entspricht [^\s] und zu dem \s kannst Du noch andere Zeichen hinzufügen

  3. @@Tenni:

    nuqneH

    w{3}.?\S+|http://.+\S+

    Was ist mit 'https://'?

    Wie kann ich nun verneinen dass am Ende !?:;- etc. mit übernommen werden?

    Was aber, wenn eins der Zeichen tatsächlich mit zum URI gehört?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Wie kann ich nun verneinen dass am Ende !?:;- etc. mit übernommen werden?

      http://example.com/foo?
      "http://example.com/foo"?
      http://example.com/foo ?

      RFC 3986, Appendix C

      Was aber, wenn eins der Zeichen tatsächlich mit zum URI gehört?

      http://example.com/foo?
      "http://example.com/foo?"
      http://example.com/foo?

      1. @@suit:

        nuqneH

        Ähm, meine Glaskugel verrät, dass es hier wohl darum geht, URIs in Nutzereingaben (Kommentare, Forum, …) in anklickbare Links umzuwandeln.

        Was also soll daraus werden, wenn ein Nutzer "http://example.net/foo," eingegeben hat: '<a href="http://example.net/foo">http://example.net/foo</a>,' oder '<a href="http://example.net/foo,">http://example.net/foo,</a>'?

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Was also soll daraus werden, wenn ein Nutzer "http://example.net/foo," eingegeben hat: '<a href="http://example.net/foo">http://example.net/foo</a>,' oder '<a href="http://example.net/foo,">http://example.net/foo,</a>'?

          Jetzt hab ich dich :)

          Ich würde dabei beinhart das Zweitere verwenden, da URIs eben in Begrenzer gehören - auch wenn es nur Whitespaces sind.

          1. @@suit:

            nuqneH

            Ich würde dabei beinhart das Zweitere verwenden

            Das ist vermutlich in den meisten Fällen nicht das beabsichtigte Ergebnis.

            Es gilt hier, die Folgen von false positive und false negative abzuwägen.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Man kann es RFC-konform und trotzdem benutzerfreundlich machen. Beispiele:

              Gestern war ich auf http://example.net und es hat mir gefallen.
                  Ich war auch auf http://example.org, das war nicht so gut.

              Im zweiten Falle spuckt man noch zusätzlich eine Warnung aus, man möge nachbessern und die üblichen Begrenzer verwenden, wenn nicht beabsichtigt war, dass das Satzzeichen zur URL dazugehört.

              Wenn es nicht die Gelegenheit zum Nachbessern gibt, dann Pech gehabt. Gunnar, du weißt, wie das Internet läuft: wenn wir uns nicht alle an die Regeln halten, funktioniert es nicht.

              1. @@CPAN:

                nuqneH

                Gunnar, du weißt, wie das Internet läuft: wenn wir uns nicht alle an die Regeln halten, funktioniert es nicht.

                An welche Regel sollte sich den jemand, der in einem Blog oder Forum einen Kommentar abgibt, denn halten? Zumal er womöglich gar nicht weiß, dass im Text enthaltene URIs automatisch in anklickbare Links verwandelt werden.

                Klar kann der Blog-/Forum-Betreiber eine Anleitung zum Kommentieren anbringen (Wer liest die schon?) und es den Nutzern auch überlassen, selbst für die Verlunkung zu sorgen (wie es in diesem Forum gemacht wird). Versierten Nutzern ist das zuzumuten, der Allgemeinheit nicht. Die werden einfach URIs im Text posten. (Auch das kommt hier im Forum leider öfter vor.)

                Es ist also durchaus sinnvoll, im Text nach URIs zu suchen und aus diesen Links zu generieren (was in diesem Forum aus speziellen Gründen nicht gemacht wird).

                Bei einer Aufzählung "http://example.com, http://example.net, http://example.org" den Nutzer wiederholt zu fragen „Meinen Sie 'http://example.com' oder 'http://example.com,'?“, „Meinen Sie 'http://example.net' oder 'http://example.net,'?“ ist vielleicht auch nicht der Stein der Weisen.

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)