C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 53 を表示中)
■29558 / )  Re[12]: 正規表現
□投稿者/ よねKEN (223回)-(2008/12/10(Wed) 17:14:09)
2008/12/10(Wed) 17:25:26 編集(投稿者)

No29553 (ヤンサン さん) に返信
> よねKEN が教えてくれた方法で無事できました!

回答しておいてなんですが、仕事で使うプログラムであれば、
この実現方法を使うのは基本的に避けてください。
提示の方法は、-1000〜1000に限定された書き方なので、値の範囲が動的に変わるような場合や、
今は-1000〜1000でも将来的に変更になる可能性がある場合に破綻します。
(毎度毎度プログラム修正&テストが必要になります)

> (@"^(-?(1000(\.0{1,2})?|[1-9][0-9]{0,2}(\.[0-9]{1,2})?|0\.([1-9][0-9]|[0-9][1-9]))|0(\.0{1,2})?)$");
> という正規表現なんですが、ちょっと難解で理解できません;;
> 解説をお願いすることはできませんでしょうか?

(1) マイナス符号を付けてよい場合と付けてはダメな場合がある。
  →@"^(-?<マイナス符号を付けてよい値の正規表現>|<マイナス符号を付けてはダメな値の正規表現>)$"
(2) -1000〜1000の範囲ということは、絶対値で言うと1000以下の範囲。
 最大値は1000、1000.0、1000.00のいずれか。
  →1000(\.0{1,2})?
(3) 4桁の整数は1000だけなので、(2)で考慮済み。
  よって、後は整数部3桁以下の値のみを考慮すればよい。
  →[1-9][0-9]{0,2}(\.[0-9]{1,2})?
   → 前半の[1-9][0-9]{0,2} は1〜999の値だけに制限しています。最上位桁の部分を[1-9]と
     することで0を除外し、002みたいなパターンをはじきます。
     後半の(\.[0-9]{1,2})?が最大2桁の小数部(省略可能)です。
(4) 0.0、0.00以外の整数部0の小数はOK
  小数部2桁のどちらかで0以外の数字が含まれていればよい。
  → 0\.([1-9][0-9]|[0-9][1-9])
(5)0は-を付けられないが、それ以外の値は-を付けられる。
 0、0.0、0.00はマイナス符号を付けてはいけないパターン。
  → 0(\.0{1,2})?

※(1)の<マイナス符号を付けてよい値の正規表現>と書いている部分は(2)または(3)または(4)で、
 (1)の<マイナス符号を付けてはダメな値の正規表現>が(5)です。

返信 編集キー/


管理者用

- Child Tree -