2012-04-13 14 views
1

Javaの正規表現

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

は、誰かが上記の正規表現パターンを説明できますか?それは何ですか? 既存の機能との間にスペースを入れないようにする必要があります。空白が含まれているため、「スタックオーバーフロー」を許可しないでください。

私が試したパターン以下

EDITは私のために正常に動作しています。すべてのご提案をありがとう:

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

答えて

8

あなたの正規表現は、単一の数字、単語や空白文字の任意の1文字ではありません任意の単一文字のいずれかと一致します。

^が1つずつ表示されているため、これらの3つの選択肢のいずれも、最初に開始する必要があります。

あなたの説明に基づいて、私はあなたがこのような表現したいと思う:1を含むもの以上の単語文字[A-Za-z0-9_]、ハッシュ#、ドル$にマッチします

^[\w#$]+$ 

を。単語の文字にスペースは含まれていないので、これはうまくいくはずです。

私はそれだけで文字列全体(これは何をしたいのですか?)あなたはちょうどそれが、その後$を削除し、あなたの例のように先頭に一致する場合と一致していることを確認アンカー^$を追加しました。他の回答に追加するには

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

どのようにして1つまたは複数のスペースを使用できないようにするか。私は別にそれを行う必要がありますか? – Muse

+0

いいえ、これはそのまま動作するはずです。これによって単一または複数のスペースは許可されません。 @rodionが '\ S'を使うという提案も良い結果ですが、同様の結果が得られます。私は、それが一致しているかどうかについてより具体的なので、それを好むかもしれません。 – Robbie

+0

元の投稿の上記の小切手に何らかの追加チェックをしていただけますか?あなたが提案した表現は、ほとんどのケースではうまく機能していないようです。 – Muse

4

:あなたの例のように、あなたはこのようなあなたのJavaコードで\をエスケープする必要があること

注私はあなたが"^\\S*$"のようなパターンを探していると思いますが、これ意味:任意の数の空白以外の文字(\\S*)を先頭(^)から末尾($)まで一致させます。

+0

私の答えの良い追加情報のための+1 – Robbie

+0

あなたは元の投稿の上記のチェックにいくつかの追加のチェックを提供していただけますか?あなたが提案した表現は、ほとんどのケースではうまく機能していないようです。 – Muse