正規表現入門
最終更新: [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
行頭に引用符を付加する
- M-x query-replace-regexp
- Query replace regex: ^[RET] (行頭を指定)
- With: > [RET] (引用符を指定)
grep
sed
awk
tcl
sh
csh
regex lib
参考文献
- C マガジン -正規表現特集号-,Vol.5, No.3, ソフトバンク, 1993-3.
- Perl プログラミング -正規表現節-, ソフトバンク
- GNU Emacs, ソフトバンク
- AWK を 256 倍,志村,アスキー
- 詳説 正規表現:Feffrey E. F. Friedl, 歌代和正[監訳],{春遍雀來,鈴木武生}[共訳], オライリー・ジャパン,1999/4/30(1), ISBN4-900900-45-1 C3000 \4300E
Links
現在作成中です (^^).
||
Doc
||
Programs
||
BBS
||
Oshiro
||
Mail-to:
oshiro@mibai.tec.u-ryukyu.ac.jp