Matching with regular Expressions
正規表現によるマッチ

8章 正規表現とマッチ

8.1 文字クラス

" [] " を使って文字を列挙すると,そのなかの1 文字 にマッチする.開き括弧を "[^" とした場合, 指定された文字集合の補集合にマッチする.

[abcxyz] は a,b,c,x,y,z のいずれか 1 文字にマッチする.

" - " を使って全てを列挙せずに範囲を指定することができる.

[0-9] は数字 1 文字に, [a-zA-Z] は 52 文字のアルファベットのうち 1 文字にマッチする.

[0-9] のように良く使う文字クラスにはショートカットが容易されている. 良く使う文字クラスのショートカットは P.126 8.1.1 節に, ショートカットの否定については 8.1.2 節に記載されている.

8.2 汎用の量指定子

*, +, ? 以外に,指定回数の繰りかえしを表現する方法がある.

/a{5,15} は a が 5 回以上,15 回以下連続する文字列にマッチする.

第 2 引数が省略されると上限がなくなる.更にコンマも省略するとちょうど その回数だけにマッチする.

*,+,? はそれぞれ {0,}, {1,}, {0,1}, のショートカットである.

8.3 アンカー

"^" は文字列の先頭,"$" は文字列の末尾 (もしくは改行文字)にマッチする. ここでの "^" は文字クラスの補集合の表現に用いられる ものとは同じ記号であるが別のものであることに注意. " /^1adm/ " は行頭にある 1adm にのみマッチする.

" \b " はワードの始まりと終りにマッチする

8.4 カッコによる記憶

カッコには正規表現をグループ可する役割だけでなく, 一致した文字を記憶する働きもある.文字列マッチだけでなく, 文字列置換を行うときに特に有用である.

" \1 " で最初の開きカッコからはじまるグループに マッチした文字列を記憶する. 例えば " /(.)(.)\1\2/ " は " abab " にマッチし, " /(.)(.)\2\1/ " は " abba " にマッチする. " /((.)(.))\1\2/ " は " ababa " にマッチする. " \1 " が " 外側のカッコ (ab)に, " に, " \2 " が内側左のカッコ (a) に, " \3 " が内側右のカッコ (b) に, " マッチするからである.

マッチ式の外で,perl の変数としてマッチ結果を使う方法もある.

p.158 のパターンをテストするプログラムを書き,テストせよ

課題 8

8.10演習問題を解け. 解答プログラムを添付メールとして提出せよ. メールの宛先は <hiroshi@tokai.ac.jp> とし, Subject (件名)を report perl 8 とせよ.


Updated in December 8, 2009, index, Yamamoto Hiroshi