Processing Text with Regular Expressions
正規表現によるテキスト処理

9章

9.1

" /パターン/ " は " m/パターン/ " のショートカットである.デリミタ(区切文字)は自由に変えられて, " /http:\/\// " と書くかわりに " m%http://% " と書くことができる.カッコ類をデリミタに使う場合は開きカッコと対応する 閉じカッコが対になる.

9.2

オプションを指定して大文字小文字の区別を無くしたり, 改行文字の特別扱いを無くしたりできる.詳しくは 9.2 節を参照.

9.3

ここまではどの文字列に対してマッチさせるのかを指定していない. これはマッチさせる対象を指定しない場合にデフォルトの変数 " $_ " に対してマッチさせる約束になっているためである. p.122 のテストプログラムでは " while (<>) " によって入力がデフォルト変数 " $_ " に代入されることを利用している.

" =~ " を使って任意の変数に対してマッチさせることができる.

教科書 p.139 下の例のプログラムを動作させ,確認せよ.

my $some_other = "I dream of betty rubble.";
if ($some_other =~ /\brub/){
    print "Aye, there's the rub.\n";
}

9.4

正規表現内はダブルクォート文字列と同様の変数展開が行われる. これを利用してパターンに変数を埋めこむことができる.

p.122 のパターンテストプログラムを以下のように書き変えよ.

  1. パターンをプログラムの最初に " $ptn " という変数に文字列として与える.
  2. if 文で実際にテストする部分のパターンには $ptn の変数展開を利用 する.

9.5 マッチ変数

パターンマッチが終った後,例えば " \1 " で記憶されていた文字列は " $1 " として perl から利用できる.

マッチ変数はマッチしたときだけ設定されるので, マッチしなかったときに利用しないようにプログラムを書く必要がある.

パターンマッチとマッチ変数の利用との間に, プログラムを追加する可能性を考えると,別の名前の変数を用意して 記憶しておくほうが安全である.

パターン全体に対するマッチ変数が自動的にセットされている. " $` ", " $& ", " $' ", はそれぞれマッチした部分より前,マッチした部分,マッチした部分より後を 記憶している.これによりマッチの対象となった文字列を分割したものになっている.

p.122 のプログラムをもう一度読みなおしてみよ.

課題 9

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

More Control Structures
さまざまな制御構造

10章

課題 10

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


Updated in December 8, 2009, index, Yamamoto Hiroshi