2012-04-13 14 views
1

Ich habe einen unten Frieden Code:Java Regular Expression

 Pattern p = Pattern.compile("^\\d|^\\W|^\\s"); 
    Matcher m = p.matcher("stack overflow"); 

Kann jemand die oben RegexMuster erklären? Was es macht ? Ich muss dafür sorgen, dass keine Zwischenräume mit der bestehenden Funktionalität, z. Es sollte keinen "Stapelüberlauf" zulassen, da es Leerzeichen enthält.

EDIT

Unten Muster habe ich versucht, für mich funktioniert gut. Vielen Dank an Alle für Ihren Vorschlag:

[a-zA-Z0-9_$#] 

Antwort

8

Ihre regulären Ausdruck entweder eine einzelne Ziffer, oder bei einem einzelnen Zeichen, die kein Wort oder eine besondere Zeichen, dass ein weißer Raum char ist.

Jede dieser drei Alternativen muss am Anfang des Betreffs beginnen, da Sie in jedem Wechsel ^ haben.

Basierend auf Ihrer Beschreibung, ich glaube, Sie einen Ausdruck wie diese wollen:

^[\w#$]+$ 

Welche alles, was man enthält übereinstimmen oder mehrere Wortzeichen [A-Za-z0-9_], Hash # und Dollar $. Word-Zeichen enthalten keine Leerzeichen. Dies sollte funktionieren.

Ich habe hinzugefügt Anker ^ und $, die dafür sorgen, dass es nur die gesamte Zeichenfolge entspricht (das ist, was Sie wollen?) Wenn Sie nur wollen, dass es, wie in Ihrem Beispiel am Anfang übereinstimmen, dann die $ entfernen.

Beachten Sie, dass, wie in Ihrem Beispiel, müssen Sie die \ in Ihrem Java-Code wie folgt zu entkommen:

Pattern p = Pattern.compile("^[\\w#$]+$"); 
+0

So, wie es nicht zulassen, einzelne oder mehrere Leerzeichen dazwischen. Muss ich das separat machen? – Muse

+0

Nein, das sollte so funktionieren wie es ist. einzelne oder mehrere Leerzeichen sind nicht erlaubt. Der Vorschlag von @rodion, '\ S' zu verwenden, ist ebenfalls gut, würde aber ähnliche Ergebnisse liefern. Ich könnte es bevorzugen, da es genauer ist, was (nicht) abgestimmt wird. – Robbie

+0

Können Sie bitte einen zusätzlichen Scheck zu dem oben genannten Scheck im Original Post geben? Der von Ihnen vorgeschlagene Ausdruck scheint für wenige Fälle nicht zu funktionieren. – Muse

4

zu anderen Antworten hinzu: Ich glaube, Sie suchen nach einem Muster wie "^\\S*$", die bedeutet: Übereinstimmung einer beliebigen Anzahl von Leerzeichen (\\S*) von Anfang (^) bis zum Ende ($).

+0

+1 für gute zusätzliche Informationen auf meine Antwort – Robbie

+0

Können Sie bitte einige zusätzliche Überprüfung der oben genannten Überprüfung in der ursprünglichen Post zur Verfügung stellen? Der von Ihnen vorgeschlagene Ausdruck scheint für wenige Fälle nicht zu funktionieren. – Muse