2011-10-19 6 views
1

最大サイズが,のアルファベットとアルファベットの間にのみアルファベットと数字とスペースのみを許可する正規表現。開始時に空白を許可しない正規表現

([a-zA-Z0-9]+([\\s][a-zA-Z0-9]+)*){0,20}

これは開始時に空白を許可しませんが、最大サイズ条件をチェックしていません。この正規表現を変更するにはどうすればよいですか?

+2

マッチしなければならないものとマッチしないものの例をいくつか挙げるとよいでしょう。 – aioobe

答えて

5

パターン全体を20回繰り返します。私は空の入力が許可されなければならない場合は、おそらく(...)?で全体を包む、

[a-zA-Z0-9][\\sa-zA-Z0-9]{0,19} 

のようなものを意味推測しています。

+0

この正規表現は、空の文字列を許可するために機能しますか?[a-zA-Z0-9] {0,1} [\\ sa-zA-Z0-9] {0,19} – user679526

+0

いいえ、最初の文字が空白でなければならないという制限も取り除きます。答えですでに説明したように、それを行う方法は '([a-zA-Z0-9] [\\ sa-zA-Z0-9] {0,19})ですか?疑問符は '{0,1}'を書くよりコンパクトで慣用的なwsyです。 – tripleee

0

以下の正規表現:

boolean foundMatch = subjectString.matches("(?i)^(?=.{1,20}$)[a-z0-9]+(?:\\s[a-z0-9]+)*$"); 

は、単一のスペースと、より多くの英数字が続く英数字で始まる1〜20文字の文字列に一致します。文字列はスペースではなく英数字で終わらなければならないことに注意してください。

3

すべてJavaの正規表現「機能」を使用しないでください。 :D内訳

String regexString = "(?<!\\s+)[\\w\\s&&[^_]]{0,20}"; 

、これは言う:

(?<!\\s+) # not following one or more whitespace characters, 
[   # match one of the following: 
    \\w  # word character (`a-z`, `A-Z`, `0-9`, and `_`) 
    \\s  # whitespace characters 
    &&[^_] # EXCEPT FOR `_` 
]   # 
{0,20}  # between 0 and 20 times 

それは、\ wはそうでない場合は、アンダースコアが含まれるにもかかわらず、a-zA-Z0-9、と空白にマッチします、そこに余分な部分を言いますそれはJavaに特有だと思います...とにかく、楽しかったです!

関連する問題