□投稿者/ よね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)です。
|
|