kleine Regex Frage für Java
mpix 24.11.2009 - 12:44 1749 7
mpix
Bloody Newbie
|
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: [a-z]+[\\.a-z]*
Könnte mir hier jemand helfen ?! Danke !!
|
watchout
Legendundead
|
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... [a-Z][\.\w]*\.[\w]{2,}(/[/\.%\?#\w]*)?
(ungetestet ) würd ich jetzt mal so grob nehmen - ist nur sehr quick'n dirty
|
Luzandro
OC Addicted
|
erstmal ".." ist in domains afaik nicht zulässig geht aber bei dir auch (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
ModeratorHoffnungsloser Optimist
|
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 assword@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
Legendundead
|
geht aber bei dir auch (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
Legendundead
|
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://userassword@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ß
|
DirtyHarry
aka robobimbo
|
|
tresh
Little Overclocker
|
DSLab Beispiel 2?
|