• ベストアンサー

正規表現の書き方について

既存のプログラムで以下のソースがあります。 ------------------------------------------------ if(this.MAIL_ADDRESS.matches("[0-9-a-z-A-Z]*")){ ------------------------------------------------ [0-9-a-z-A-Z]と[0-9a-zA-Z]は同じ意味と考えてよいのでしょうか? それとも現状のプログラムの書き方が間違えていますか? (ネットで調べても、[0-9-a-z-A-Z]という書き方は見かけなかったため。たぶん動作はしてくれていると思うのですが。。) よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>[0-9-a-z-A-Z]と[0-9a-zA-Z]は同じ意味と考えてよいのでしょうか? 違う意味です。 [0-9a-zA-Z]は0~9の範囲の文字、またはa~zの範囲の文字、またはA~Zの範囲の文字にマッチします。 [0-9-a-z-A-Z]は↑に加えて-(半角ハイフン)にもマッチします。

MixNuts
質問者

お礼

ご回答、ありがとうございます。 [0-9-a-z-A-Z] [0-9-a-zA-Z] [0-9a-zA-Z-] 上記は全て同じ意味になるという理解で良いでしょうか? よろしくお願いいたします。

その他の回答 (2)

  • tom11
  • ベストアンサー率53% (134/251)
回答No.3

for(char c ='!';c<='~';c++){ boolean b = String.valueOf(c).matches("[0-9-a-z-A-Z]"); boolean b1 = String.valueOf(c).matches("[0-9-a-zA-Z]"); boolean b2 = String.valueOf(c).matches("[0-9a-zA-Z-]"); System.out.println(c+" "+b+" "+b1+" "+b2); } ! false false false " false false false # false false false $ false false false % false false false & false false false ' false false false ( false false false ) false false false * false false false + false false false , false false false - true true true . false false false / false false false 0 true true true 1 true true true 2 true true true 3 true true true 4 true true true 5 true true true 6 true true true 7 true true true 8 true true true 9 true true true : false false false ; false false false < false false false = false false false > false false false ? false false false @ false false false A true true true B true true true C true true true D true true true E true true true F true true true G true true true H true true true I true true true J true true true K true true true L true true true M true true true N true true true O true true true P true true true Q true true true R true true true S true true true T true true true U true true true V true true true W true true true X true true true Y true true true Z true true true [ false false false \ false false false ] false false false ^ false false false _ false false false ` false false false a true true true b true true true c true true true d true true true e true true true f true true true g true true true h true true true i true true true j true true true k true true true l true true true m true true true n true true true o true true true p true true true q true true true r true true true s true true true t true true true u true true true v true true true w true true true x true true true y true true true z true true true { false false false | false false false } false false false ~ false false false

MixNuts
質問者

お礼

同じという事ですね。 ありがとうございました。

回答No.2

>[0-9-a-z-A-Z] >[0-9-a-zA-Z] >[0-9a-zA-Z-] >上記は全て同じ意味になるという理解で良いでしょうか? 良いです。 厳密な所で正規表現エンジンにかかるコストまで同じになるかどうかは、 これらがどう最適化されるかがちとわからないため答えられませんが、 動作としては同様の振る舞いをします。

MixNuts
質問者

お礼

ご回答、ありがとうございました。

関連するQ&A