2011-02-07 25 views
36

私はアルファベットの文字だけが必要なテキストボックスの入力バリデータをプログラムするために正規表現を使用しています。 [A-z][a-zA-Z]が同等かどうか、またはパフォーマンスが賢明であるかどうか疑問に思っていました。regex [A-z]と[a-zA-Z]の違い

私は[a-zA-Z]を検索していますが、[A-z]はありません。

私はjavaのString.matches(regex)を使用しています。 [a-zA-Z]AからZaからzの範囲内の範囲でASCII文字に一致する一方

答えて

53

[A-z]は、Aからzの範囲でASCII文字に一致します。一見すると、これは同等に見えるかもしれませんが、ASCII文字のthis tableを見ると、A-zには他のいくつかの文字が含まれていることがわかります。具体的には、[\]^_、 `` `(これは明らかに望ましくない)です。

+6

せず、唯一のアルファベットと一致することを意味します。 – Eric

+1

@Eric https://secure.wikimedia.org/wikipedia/en/wiki/Ascii私はあなたが 'Z'と' a'の間に '[\\]^- \' – KitsuneYMG

8

ASCII tableをご覧ください。 Zaの間にいくつかの文字があることがわかりますので、意図以上に一致します。

9

azは 'A'から 'Z' Azに一致します。これらの文字はすべて、 'Z'と 'a'の間の[] ^/_ `

角括弧は、文字クラスを作成し、ハイフンを2つの用意文字の間にすべての文字を追加するための省略形ですhttp://www.asciitable.com/

6

を参照してください。すなわち[A-F][ABCDEF]と書くことができます。

文字クラス[A-z]は、それらの文字の間のすべての文字に一致します。これらの文字には、[['、' \ '、']]などの他の文字も含まれます。

両方の場合を指定する代わりに、/i修飾子を使用して、正規表現を大文字小文字を区別しないように設定することもできます。

3

(Javaの文字が基づいている)ASCII chartを見てみましょう:Zとの間に位置し、かなりの数の句読点は、これらはすなわち、あります

[\]^ _` 
6

あなたはASCIIを見てみましょうすると

A = 65 
Z = 90 
a = 97 
z = 122 

をので、[A-z]は65から122までのすべての文字にマッチします。これは、同様にこれらの文字(91 -> 97)が含まれています:

テーブル、あなたは次のように表示されます
[\]^_` 

これは[A-Za-z]は注目文字Iは、Z-の間の文字があった場合、私は本当にわからなかったと思います

関連する問題