kleine Regex Frage für Java

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/kleine_regex_frage_fuer_java_212124/page_1 - zur Vollversion wechseln!


mpix schrieb am 24.11.2009 um 12:44

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 schrieb am 24.11.2009 um 15:29

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 schrieb am 24.11.2009 um 16:01

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 schrieb am 24.11.2009 um 16:48

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 schrieb am 24.11.2009 um 17:00

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 schrieb am 24.11.2009 um 17:15

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 schrieb am 25.11.2009 um 19:13

immer ein guter tipp --> http://regexlib.com/


tresh schrieb am 29.11.2009 um 01:43

DSLab Beispiel 2? :)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026