Syntax eines reg. Ausdrucks....

Crai

Mitglied
Hallo Leute,

ich habe eine Verständisfrage:
Was ist an folgendem regulären Ausdruck syntaktisch nicht korrekt?
Code:
protected static final Pattern ALLOWED_PATTERN = Pattern.compile("((\\d+[a-z]*[-|_]*) | (\\d*[a-z]+[-|_]*) | (\\d*[a-z]*[-|_]+))+");

Es geht mir hier nicht wirklich um die Richtigkeit des Ausdrucks, eher um dessen richtige Formulierung.
Ich hab das Minus(-) und den Underscore(_) auch schon mit "\\" vornedrann angegeben, aber das hilft auch nichts...

Gruß,
Crai
 
Ich hab von JAVA keine Ahnung, aber RegExp bleibt ja RegExp...

ich würd mal sagen, das + am Ende ist falsch, das steht für das 1-xfache wiederholen eines Zeichens, vor dem Plus steht aber kein Zeichen.
 
Hi,

@Sven: Mit dem + am Ende wollte ich nur sicherstellen, dass irgendeine Zeichenkombination mindestens einmal vorkommt.

@Tom:
Ok, der Sinn dieses Ausdrucks besteht darin, damit gültige Datei- und Verzeichnisnamen zu erkennen.
Gültige Namen enthalten:

- ausnahmslos Kleinbuchstaben
- Ziffern von 0-9
- Unterstriche
- Trennstriche
- KEINE Leerzeichen oder irgendwelche anderen Sonderzeichen
- müssen mindestens aus einem Zeichen bestehen
- beliebige Kombinationen der erlaubten Zeichen sind möglich

Gruß,
Crai
 
Hallo!

Wie waers denn damit:
Code:
    String regex = "[a-z0-9_-]+";
        String path = "program-files";
        System.out.println(path.matches(regex));

Gruss Tom
 
Vielen Dank Tom!
Es funktioniert!
Und noch dazu ist der Ausdruck um einiges eleganter! :)

Ich hab das ganze noch um die Erkennung eines Punktes erweitert, für die, die es intressiert:

Code:
protected static final String regex = "[a-z0-9_-p{.}]+";

Grüße,
Craimore
 
Hi Tom,

hab ich anfangs so auch versucht, hat aber beim Debuggen immer etwas von
invalid character gebracht, deswegen hab ich dann die jetzige Lösung gewählt.

Gruß,
Crai
 
Zurück