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

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

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

Re[2]: 正規表現について


(過去ログ 23 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■10262 / inTopicNo.1)  正規表現について
  
□投稿者/ zono (20回)-(2007/11/14(Wed) 21:51:04)

分類:[VB.NET/VB2005] 

あるプログラムの改修を行っていて
Regexクラスを用いて正規表現の色々なチェック処理
を実装しなければならない状態です。

以下の数値をチェックする正規表現の記述方法がわかる方がいましたら
教えて下さい。

【数値】
 001001 〜 289289 

【条件】
 上位3桁と下3桁で001〜289を満たしている数値を正常とする。
 例えば001290の数値はエラーとする(正規表現で検出されない)

【備考】
以下のように設定したら当然失敗しました。。
^[0-2][0-8][1-9][0-2][0-8][1-9]$
 001099と正常とすることができなかった為

 VBの質問とはちょっと離れてしまいますが、
 誰かわかる方がいましたら教えて下さい。
 申し訳御座いませんがよろしくお願いします。

引用返信 編集キー/
■10263 / inTopicNo.2)  Re[1]: 正規表現について
□投稿者/ mあ@反省中 (18回)-(2007/11/14(Wed) 22:09:15)
No10262 (zono さん) に返信
> あるプログラムの改修を行っていて
> Regexクラスを用いて正規表現の色々なチェック処理
> を実装しなければならない状態です。
> 【数値】
>  001001 〜 289289 

10進数数値に直してから、1000で割って、商と余がそれぞれ1 〜 289 の範囲内かどうかを
チェックするってのは最後の手段なのですか?
正規表現のぬらりくらりよりよっぽど分かりやすいように思えます。

引用返信 編集キー/
■10267 / inTopicNo.3)  Re[2]: 正規表現について
□投稿者/ れい (197回)-(2007/11/14(Wed) 22:18:11)
2007/11/14(Wed) 22:31:29 編集(投稿者)

#間違い修正

No10263 (mあ@反省中 さん) に返信
> 10進数数値に直してから、1000で割って、商と余がそれぞれ1 〜 289 の範囲内かどうかを

私もそう思います。

正規表現がよくわからないなら使わないほうが良いです。

また、正規表現は文字・文字列を扱うための技法です。
数で課せられている制限なら、数になおしてから検証すべきです。

(?<upper>\d{3})(?<lower>\d{3})

としておいて、
1 <= Integer.Parse(Match.Group("upper").Value) <= 289
という風にするのが保守性も作成効率もいいと思います。

どうしても、というなら場合分けを使います。

(00[1-9]|0[1-9]\d|1\d\d|2[0-8]\d){2}



引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -