2013-04-25 17 views
8

Was ist die richtige Syntax für den Abgleich aller Zeichen außer bestimmten.Java Regex passt alle Zeichen außer

Zum Beispiel möchte ich alles außer Buchstaben [A-Z] [a-z] und Zahlen [0-9] übereinstimmen.

Ich habe

string.matches("[^[A-Z][a-z][0-9]]") 

Ist das nicht richtig?

+1

[^ A-Za-z0-9] .. – Pheonix

Antwort

18

Ja, Sie brauchen nicht verschachtelt [] so. Verwenden Sie stattdessen:

"[^A-Za-z0-9]" 

Es ist alles eine Zeichenklasse.

+0

ahh natürlich muss es spät werden lol – Tommy

1
string.matches("[^A-Za-z0-9]") 
1

Fast richtig. Was Sie wollen, ist:

string.matches("[^A-Za-z0-9]") 

Hier ist eine gute tutorial

6

Wenn Sie etwas wollen, aber Buchstaben übereinstimmen, können Sie einen Blick in Unicode properties haben sollte.

\p{L} ist jede Art von Brief von jeder Sprache

ein großes „P“ Verwenden statt es die Negation ist, so würde \P{L} nichts gefunden, das kein Buchstabe ist.

\d oder \p{Nd} ist passend Ziffern

So Ihren Ausdruck in der modernen Unicode-Stil aussehen würde wie diese

entweder eine negierte Zeichenklasse mit

[^\p{L}\p{Nd}] 

oder negiert Eigenschaften

[\P{L}\P{Nd}] 

Die nächste Sache ist, matches() passt den Ausdruck gegen die vollständige Zeichenfolge, so dass Ihr Ausdruck nur mit genau einem Zeichen in der Zeichenfolge wahr ist. So müssen Sie eine quantifier hinzuzufügen:

string.matches("[^\p{L}\p{Nd}]+") 

gibt true zurück, wenn der gesamten String nur nicht alphanumerische Zeichen und mindestens einer von ihnen.

0

Sagen wir, dass Sie sicherstellen möchten, dass keine Strings das Symbol _ in sich haben, dann würden Sie einfach so etwas verwenden.

Pattern pattern = Pattern.compile("_"); 
    Matcher matcher = Pattern.matcher(stringName); 
    if(!matcher.find()){ 
     System.out.println("Valid String"); 
    }else{ 
     System.out.println("Invalid String"); 
    }