"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

kleine Regex Frage für Java

mpix 24.11.2009 - 12:44 1749 7
Posts

mpix

Bloody Newbie
Avatar
Registered: Jan 2007
Location: Wien
Posts: 27
Hallo,

Zum wiederholten Male scheitere ich an einer Regex Abfrage .. Das ganze dann zusätzlich auch noch in Java ..

Ich will dass da Abfrage einfache URLs zulässt ..

Beispiele, die zugelassen werden sollen:

at
blub.at
bla.blub.at usw. ..

Eine zweite Abfrage sollte dann die oben genannten URL mit zusätzlichen Pfaden akzeptieren ..

Beispiele, die zugalssen werden sollten:

at/file.ext
blub.at/file
bla.blub.at/lala.lulu

Mein kläglicher Versuch der ersten Abfrage sieht folgendermaßen aus:
Code: PHP
[a-z]+[\\.a-z]*

Könnte mir hier jemand helfen ?!
Danke !!

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
erstmal ".." ist in domains afaik nicht zulässig, im pfad aber schon, deine regex würde etwa
"a..................." ohne weiteres akzeptieren, ist nur halt keine echte domain.

Wenn ich mich jetzt nicht irre kann man URLs mit Regex nicht vollständig darstellen (und eben damit auch prüfen), dazu braucht man eine vollständige grammatik

Mal schaun was ich hinbekomm...
Code:
[a-Z][\.\w]*\.[\w]{2,}(/[/\.%\?#\w]*)?
(ungetestet ;))

würd ich jetzt mal so grob nehmen - ist nur sehr quick'n dirty ;)

Luzandro

OC Addicted
Avatar
Registered: Mar 2006
Location: 2482
Posts: 708
Zitat von watchout
erstmal ".." ist in domains afaik nicht zulässig

geht aber bei dir auch :p (zumindest "a....at")
Im Pfad würde ich zumindest noch +-=&; dazunehmen, gültig ist wohl noch viel mehr

Innerhalb der [] solltest du Punkt/Fragezeichen auch nicht escapen müssen

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Erstens sind das alles keine URLs (solche beginnen z.B. mit "http:" oder "ftp:" oder "mailto:").
Zweitens können Domainnamen durchaus mit Ziffern beginnen und nicht-Buchstaben enthalten (z.B. "7-zip.org").
Drittens ist z.B. "ftp://user:password@example.com/%2Fetc/hosts" eine verbreitete Form von URLs.

Also was genau willst du checken? Wenns wirklich URLs sind, dann reicht ein Regex sicher nicht.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Luzandro
geht aber bei dir auch :p (zumindest "a....at")
Im Pfad würde ich zumindest noch +-=&; dazunehmen, gültig ist wohl noch viel mehr

Innerhalb der [] solltest du Punkt/Fragezeichen auch nicht escapen müssen
Ich weiss, aber wie gesagt lässt sich eine URL nicht vollständig durch regex darstellen, vielleicht hab ich mich falsch ausgedrückt.

Es kommt auch stark auf den Anwendungsfall an - will man nur prüfen ob eine url "ungefähr" stimmen könnte - reicht das wahrscheinlich - muss man sicher sein, natürlich nicht, da macht man dann aber am besten noch gleich nen check dazu ob der server auch funktioniert etc.
Will man aber etwa URLs in einem Text finden sind eigentlich beide nicht ausreichend (preisfrage: warum werden nur urls die mit http://www. anfangen oder vollständig definiert sind http://... von div. Forensoftware erkannt ;))

Willst du aber wirklich nur eine alleinstehende URL checken... es gibt eine Klasse mit Namen "URL" in Java, afair macht die auch diverse Checks auf Syntax.


Btw.: Escapen ist in dem Fall nicht falsch, und 100 verschiedene Implementierungen von Regex auswendig weiss ich nicht, tut mir leid ;)

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von that
Erstens sind das alles keine URLs (solche beginnen z.B. mit "http:" oder "ftp:" oder "mailto:").
Zweitens können Domainnamen durchaus mit Ziffern beginnen und nicht-Buchstaben enthalten (z.B. "7-zip.org").
Drittens ist z.B. "ftp://user:password@example.com/%2Fetc/hosts" eine verbreitete Form von URLs.

Also was genau willst du checken? Wenns wirklich URLs sind, dann reicht ein Regex sicher nicht.
Tsts, lass mich doch ausschreiben :(

Ok, stimmt hatte vergessen dass Domains auch mit Ziffern anfangen können, aber abgesehen davon kann eine URL ja sowieso auch eine IP Addresse (v4 / v6) enthalten und so auch mit Ziffern anfangen, und damit wird es in der Sekunde leichter Yacc anzuwerfen oder sich eine fertige Klasse zu suchen, weil ja eine IP Addresse nur bis 255 gehen darf, aber eine v6 einen Hex String, ... *hust* http://labs.apache.org/webarch/uri/...#collected-abnf *hust* viel Spaß :p

DirtyHarry

aka robobimbo
Avatar
Registered: Apr 2001
Location: outer space
Posts: 464
immer ein guter tipp --> http://regexlib.com/

tresh

Little Overclocker
Avatar
Registered: Feb 2003
Location: Vienna
Posts: 73
DSLab Beispiel 2? :)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz