Reg Exp: URL
Tenni
- programmiertechnik
1 ChrisB0 Texter mit x0 CPAN0 Gunnar Bittersmann
0 suit
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
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
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
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
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.
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
@@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'
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?
@@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'
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.
@@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'
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.
@@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'