正規表現入門

最終更新: [2006/06/15]
English version is where??
「正規表現」って何?食べたことありません.

はじめに

「正規表現」などというと非常に難しく聞こえます.なんだか難解な数学でも出 てきそうな感じ.でも,実際はそんなことはなく,さらにとても便利なものです. ぜひマスターしましょう.

リクエストがあればぜひそれをメールなどで表明して下さい.取り上げるかは確 約できませんが,ページ作成の上でとても参考になります.「どうも正規表現の ここがわからない」「こう説明すればもっとわかりやすい」などなど.お待ちし ております.

簡単にいうと

正規表現とはコンピュータに出す指示を一括するものです.

通常の使用ではコンピュータになんらかの指示を出す場合は,具体的に行わなけ ればなりません.『似た処理』が存在する場合には逐一それを指示していくこと になります.それぞれが非常に限定された指示にしかならず,これでは指示を出 す側 の手間が煩雑になってしまいます.正規表現ではこれをもう少し抽象化し て「A を探せ」「B を探せ」... と 26 個の指示を並べるのではなく,「アルファ ベットの大文字を探せ」というように表現することが可能になるのです.

単語の検索でいうと,"flower" と "girl" を探すとすると通常は「"flower" を 探せ」「"girl" を探せ」と2度手間になります.さらに大文字か小文字かによっ ても処理の回数は増えてしまいます.これを「"flower" か "girl" を探せ.大 文字・小文字は問わない」とすることができれば便利ですよね?これを行うのが 『正規表現』です.私には『一括表現』というほうがしっくりくる感じがします.

閑話
似たような言葉に「連想配列」というのもありますね.これも何 やらわけがわからなくて混乱させられるものですが,なんのことはない「引数に 数字を取らない配列」のことです.文字列を配列の引数にしただけのことです. だけ,といいましたが,これが非常に便利なもので,たとえば「材料(カレー) ="牛肉 にんじん じゃがいも たまねぎ りんご ハチミツ"」などとすることが できます.こうしておけば材料という配列からカレーの項目をすぐに引き出すこ とができるわけです.
閑話休題

先の flower と girl の検索指示を実際の正規表現で表すと

'/flower|girl/i'
となります (perl 言語の場合).スラッシュ '/' で正規表現の開始と終了を表 現しており,縦棒 '|' は条件和 (OR) を表します.これで「"flower" と "girl" のうちどちらか」を意味します.最後の 'i' は大文字と小文字を無視す ること (ignore) を意味します.大体わかりますよね.もし,すべての文字の大 小を無視するのではなく,単語冒頭の1文字のみでそうしたいのであれば,' /[Ff]lower|[Gg]irl/' とします.これは角括弧で囲まれた文字のうちのどれか であればいいという意味です.

名前の由来 (grep)

正規表現を使える検索コマンドに grep というものがあります.これはエディタ 内での正規表現である g/re/p を取ったものと言われています.

正規表現のいろいろ

正規表現は便利なのですが,統一されてはいません.言語によって微妙に異なっ ています.混乱の元ではありますが,基本を押えておけば大丈夫でしょう.恐る るに足らず.

perl

^ 行頭
$ 行末
[] 角カッコ内の一文字
[^] 角カッコ内の一文字以外
. 任意の一文字
? 0か1回の繰り返し
* 0か任意回の繰り返し
() グルーピング

elisp

replace-regexp, re-search-forward, string-match
行頭に引用符を付加する

grep

sed

awk

tcl

sh

csh

regex lib


参考文献


Links
!
現在作成中です (^^).

|| Doc || Programs || BBS || Oshiro ||

Mail-to: oshiro@mibai.tec.u-ryukyu.ac.jp