正規表現ことはじめ

Ty

こんにちは、Tyです。


今回は正規表現の入門的なお話です。
正規表現なんて名前からして教科書チックで
なんとなく苦手意識を持っていたのですが、
いざmod_rewriteやプログラム上でつかってみると
すごく便利な仕組みなので、これを期にすこしずつ
正規表現も勉強しようかな、と思います。

まず、正規表現って何か?というと
ある文字列の中から一定の条件(パターン)を満たす
部分を探すための仕組みです。

というとなんだかよくわからないのですが、
たとえば、ユーザー登録のプログラムを書いていて、
「ログインIDはアルファベットと数字以外は禁止したい」
なんて思ったときに、アルファベットと数字だけで表現された
文字列を表す正規表現(^[a-zA-Z0-9]*$)に、
入力値がマッチした場合にのみログインIDを登録する、
といったような使い方があります。

正規表現は主に
「どのような文字」が「どれだけ繰り返される」のかという
指定の組み合わせで成り立っています。

例えば、メールアドレスですと、大まかには

(1)「半角英数文字か禁止されていない半角記号」
が「何回か」繰り返される。

(2)「@(アットマーク)」が一回だけ入る。

(3)「半角英数文字か禁止されていない半角記号」
が「何回か」繰り返される。

という三つの指定の組み合わせでそれらしい表現ができます。
もっと厳密にするなら、@の後に必ずピリオドを挟む、
などの記述を加えることになります。


「どのような文字」かを指定するには主に下記の表現を用います。

. (ピリオド) 何でもいいから一文字
^ 行頭
$ 行末
\n 改行
\ エスケープ
[a-z] aからzまでのどれか

[]の表現に関しては文字コード順での検索となります。
[a-zA-Z0-9]というようにつなげることもできます。


「どれだけ繰り返される」かを指定する場合は下記の
表記を用います。* と + はわりとよく使うかと思います。
 

+ 1回以上
* 0回以上(あってもなくてもOK)
{n,m} n以上m以下
? 直前の1文字があってもなくてもOK

その他でよく使うものとしては下記のOR表現があるかと。

( a|b ) aかbのどちらか

正規表現の確認はEmEditorというエディタがお勧めです。
検索のときに基本的な正規表現のヘルパーがあることと、
ヒットした文字列をマークアップしてくれるのでどの部分に
マッチしたかが見やすいです。


Web関係でよく使う正規表現としては下記のような
ものがあるかと思います。
 

任意の文字列
.*

メールアドレス
([0-Z\._-]+)@([0-Z\._-]+)\.([0-Z\._-]+)

URL
(https?|ftp)(://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)

※Javaなどのプログラムで正規表現を用いる場合は上記の
 表現のなかの\や/などをエスケープする必要があります。

ただし、上記の表記法はあくまでも一例で、特にメールアドレスやURL
を正確にマッチさせるための正規表現の書き方はたくさんあるので、
どれが一番正確か、というのは大変難しいです。

そもそもかな文字URLのように制約がゆるくなれば表記法も変わってしまうので、
最終的には自分が作っているものではこんな制約が必要だ、という視点で
判断するとよいかと思われます。

投稿日:08年09月19日 14:09:48

トラックバックURL

コメントする

名前

メールアドレス

URL

コメント (HTMLは使えません)