Edited at

正規表現入門その1

過去にブログに書いた記事の移転その2です。今回は正規表現について書いたこの記事のQiitaへの移転です。

正規表現は何となくとっつきづらそうなイメージがありますが、使いこなせるようになると色々なこと(バリデーションとか)が簡単にできるようになるので便利です。

正規表現で最低限抑えることは、何と言っても「メタ文字」に尽きます!!メタ文字とはその文字にある特別な意味をもたせて色々な表現の助けになるようにしたものです。 よく使われるものは、以下のものです。

基本形

^ 文字列(行)の始まり

$ 文字列(行)の終わり

. 任意の1文字(改行以外)を表す

| 選択肢(右側か左側のどちらか)を表す

() サブパターンの始まりと終わり

\ エスケープ文字(これ+メタ文字でその文字自体を表すようになります)

量指定子(ある文字が何文字とか)

?  0回か1回マッチするもの


  •  0回以上マッチするもの


  •  1回以上マッチするもの


{n} n回の繰り返し

{n,} n回以上の繰り返し

{n,m} n回からm回の繰り返し

文字クラス(幾つかの文字を選択肢として表す)

[]  文字クラスの始まりと終わり([]内の1文字とマッチするものを探すのに使う)

-  範囲を表す([a-c]ならa,b,cのどれか)

^  否定を表す([^235]なら2,3,5以外)

例えば、^ap{1,3}[lr]e$なら、最初がaで始まり、pが1つから3つ続いて、次にlかrが来て、最後がeで終わります。 なので、"apple"とか、"apre"なんかがマッチします。

後は応用例として、URLの表し方を紹介します。

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

http、https、ftpで始まって://と続いて、アルファベット(大文字、小文字)、数字、後はいろんな記号が1つ以上続いて終わるというものです。 なので、http://yahoo.co.jp とかがヒットします。 PHPでは正規表現にマッチする関数としてpreg_matchがあって(使い方はこちらをみてください)、

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

みたいな使い方をします。

他にも文字列を置換したり、複数の正規表現を探したりといろんな関数があるので、是非使いこなせるようにしたいですね。その辺りは適当なタイミングで正規表現入門その2として記事を書こうと思います。