プログラミング基礎 I

第八回 (2005年 6月 6日): 正規表現によるテキスト検索と変更

AGU

© 2005 Martin J. Dürst 青山学院大学

第一問 : 次の Perl に使う言葉を簡単に説明せよ

1.1 スカラ変数: データを一個 (数か文字列) 納められる「箱」みたいな物

1.2 演算子: 計算の種類 (例えば足し算、割り算) を表す記号

1.3 代入: 変数にデータを入れる演算・操作のこと

1.4 配列: データを複数納められる変数で、一個一個は番号でアクセスできる

1.5 文字列: 文字が順番に並んでいるデータのこと。例: "Hello, World!"

第二問: $i$j の数、$s$t の文字列を比べる演算子を書け

$i$j より小さい $i  <  $j
2.1 $i$j と同じ $i==  $j
2.2 $i$j 以上 $i>=  $j
2.3 $i$j と等しくない $i!=  $j
2.4 $s$t と同じ $seq  $t
2.5 $s$t より大きい $sgt  $t

第三問: 次の式の中の演算子の意味を一つの単語か文で書け

$i + $j 足し算                                                          
3.1 $i * $j 掛け算
3.2 $i / $j 割り算
3.3 $i += $j $j を $i に足す (代入演算)
3.4 $i % $j 割り算の余り
3.5 $s .= " hello" $s の末尾に " hello" をくっつける (代入演算)

第四問: 次のプログラムの出力を書け

4.1 のプログラム:

$i = 0;
while ($i < 3) {
    print ("hello");
    $i++;
}

出力: hellohellohello

4.2 のプログラム:

$i = 5;  $k = 7;
if ($i > $k) {
    print "$i is greater";
} else {
    print "$k is greater";
}

出力: 7 is greater

第五問: 次のプログラムの次の呼び出しの場合の出力を書け

プログラム check.pl:

$low = shift();
$high = shift();
$check = shift();
if ($check < $low) {
    print "too low";
} elsif ($check >= $high) {
    print "too high";
} else {
    print "okay";
}

5.1 の呼び出し: check.pl 4 5 8   出力: too high

5.2 の呼び出し: check.pl 4 8 8   出力: too high

5.3 の呼び出し: check.pl 4 8 5   出力: okay

5.4 の呼び出し: check.pl 3 7 3   出力: okay

5.5 の呼び出し: check.pl 9 5 7   出力: too low

先々週の宿題

先週の演習・宿題

先週のまとめ: 標準入出力

プログラム内の処理:

while (<>) {
    # 行ごとの処理
}

(<> の代わりに <STDIN> も書ける)

プログラムの使い方:

C:\perl>prog.pl <inputfile.txt >outputfile.txt

条件としての正規表現

入力の行の文字列を調べる

例: "the" が含まれている行だけを出力:

while (<>) {
    if (/the/) {
        print;
    }
}

正規表現の「演算子」

正規表現の例

文字の集合

正規表現で文字の集合を表すことが多い。

(0|1|2|3|4|5|6|7|8|9) は長すぎて不便。

文字の集合: [0123456789]

(文字コードで) 連続する数字は - で省略できる: [0-9]

^ で反対の集合を表せる: [^0-9]: 数字を含まない文字集合

どの文字でも良いのは . で表す

文字列の先頭と末尾

正規表現の最初に ^ が来ると先頭から合わないといけない
例: /^The/: "The" から始まる文字列

正規表現の最後に $ が来ると末尾から合わないといけない
例: /\.$/: 行の最後に "." (\ はエスケープの記号)

正規表現の最初に ^ と最後に $ が来ると全部が合わないといけない
例: /^abc$/: abc

正規表現の使い方

謎の変数 $_

Perl では、多くの操作、命令は何を対処にしているのか書かなくても良い

その場合には変数$_ が対処となる

例:

簡単な演習・宿題

ヘボン式ローマ字表記

ヘボン式の主な特徴