まったく個人的なプログラムに関するメモです

[正規表現]

ちょっとVB.net的な事とは一度離れて…。
一度正規表現についてまとめてみたいと思います。
文字列の集合を一つの文字列で表現する方法の一つとありますがよくわからないですね。
例えば郵便番号を郵便番号として使えるかを知らべたりする方法です。まだよくわからないですね。では実際にやってみましょう!!

の前にちょっと正規表現で特殊な書き方をする文字をあげてみます。
.$[]*+?|()
\.\^\$\[\]\*\+\?\|\(\)
はいっ!!ただ、円マークを付ければいいだけです。ここではこの表では、都合で全角になったりしていますが、使用する時は半角でお願いします。
しばらく郵便番号でいろいろ試してみたいと思います。

どれかの文字

[ ] で括る事でグループ化します。

[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]
これで一応OKが出る場合もありますが非常に読みにくい!!なのでこのように書くこともできます。 "-" で範囲を指定することができます。
[0-9][0-9][0-9][0-9][0-9][0-9][0-9]

これでもまだちょっと読みにくいのでさらにこのように書くこともできます "{n}" で繰返しを指定できます。
[0-9]{7}
これでかなりすっきりしました。グループ化は数字だけだなくアルファベットやひらがなも使うことができます。また[2-7]のように中途半端にすることもできます。さらにさらに全角文字にも対応し、挙句の果てには[A-z0-9]のような書き方もできます。これはAからzまでの文字か数字の場合に合致します。<br />

あってもなくてもいい

今までの郵便番号の例だとたとえば"123-4567"と入力したときに合致しません。なのであってもなくてもよい場合は?を使います。?は直前の文字があってもなくても良い場合に合致します。
[0-9]{3}-?[0-9]{4}
この場合"1234567"と"123-4567"に合致させることができます。<br />

何個でもいい

これまででかなりの確率で郵便番号を判定できるようにはなったのですが、もし打ち間違え等で"123--4567"や"123---4567"と打ち込んでしまったら…<br />
こんな時グループ化と?と鬼のような気合で書いていってもよいのですが "*" を使う事で簡単に解決します。"*" は直前の文字がないまたは一個以上ある場合に合致します。
[0-9]{3}-*[0-9]{4}
この場合"1234567"と"123-4567""123--4567""123---4567"など"-"が何回出てきても合致させることができます。<br />

一個以上あればいい

もし先頭の3桁と下4桁を必ず区切ならければならない場合もあります。その際は "[0-9]{3}-[0-9]{4}" とやってもよいのですが、やはり打ち間違え等で"123--4567"や"123---4567"と打ち込んでしまったら…こんな時は"+"を使います。
[0-9]{3}-+[0-9]{4}
この場合"123-4567""123--4567""123---4567"など"-"が何回出てきても合致させることができます。"1234567"には合致しません。<br />

なにがなんこでもいい

ここでまででかなり郵便番号と位置できるようになってきたのではないでしょうか。ここからは"あってもなくてもいい"を少しずつ改良したいと思います。<br />
もし、"123-4567"と打ち込んでほしいところ"123 4567"と打ち込んでしまう場合もあります。こんな場合も行けちゃうんです。"."を使います。"."はなんでもいい一文字ということです。
[0-9]{3}.*[0-9]{4}
この場合 "1234567" "123 4567" "123- -4567" など何かが0回以上何回出てきても合致させることができます。<br />

最初と最後を決める

ここまでいろいろ頑張ってきましたが、実は"a23456789a"という10桁でも合致してしまいます。最初と最後が決まればもっと絞り込めるはず…<br />
最初を指定するには "^" 最期を指定するには "$" を指定してあげます。
^[0-9]{3}.*[0-9]{4}$
これで最初は数字3桁、最後は数字4桁で必ず終わらないと合致しなくなりました。なので"a23456789a"は合致しません。"1234567" "123-4567"は合致します。<br />

何か以外の何でのいい何個かの繰り返し

もうほとんど仕上げです。じつは今までのだと"0123456789"という10桁の数字ならば合致してしまうのです。10桁だけではなくて7桁以上なら合致します。<br />
最初の3桁と最後の4桁の間が数字でなければよいのです。そのほにゃららではない場合は "^" を使います。先頭に出てくる "^" と同じですが使いどころによって意味合いが違ってくるので注意してください。
^[0-9]{3}[^0-9]*[0-9]{4}$
これで最初は数字3桁、最後は数字4桁で必ず終わらなく、しかもその間には数字があってはいけなくなりました。<br />
これで"0123456789"は合致しなくなりました。また、"1234-9-567" もだめです。合致するのは"01234567" や "123@@@4567" 等かなり絞られましたね。<br />

いずれかの文字列

飛行機|船|電車
この場合 "飛行機" "船" "電車" のいずれかの文字列ならば合致します。ポイントは文字列です。<br />

その他

ほんとに細かいことなのですが"[ ]"のなかは特殊な文字は特殊な文字としてあつかわれないということです。<br />
が、"^" は"[ ]" 内の2文字目以降に書くということ、また"¥"は”¥¥"と書くことくらいですかね???

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます