KAIHATSUGIKEN GROUP

PERL PROGRAMMING LANGUAGE



****************************************************************************************
16 マッチした文字列を置き換える
**********************************
マッチするかどうか調べるだけではなく、マッチした部分を別の文字列に
置き換える事も出来ます。
置き換えるには
s/正規表現/置き換える文字列/
を使います。
sはsubustituteの意味です。

例えば
$str=~s/\s+/ /;

は、$strの中の1個以上の空白文字を一つのスペースに置き換えるものです。

変数を省略すると例によって、$_の値を置き換えることになります。
ダイヤモンド演算子と組み合わせて使うと

while(<>){
	chomp;
	s/\s+/ /;
	print"<$_>\n";
}

となります。
このプログラムは置き換え結果を<>で囲んでプリントしてしまいます。
このプログラムを実行すると

1   2   3		ユーザー入力
<1 2   3>

   1   2   3 		ユーザー入力
< 1   2   3>

これは 一つ目は1と2の間に置き換えられていてスペースは一つ分になっています。
二つ目は1の前に置き換えられていて 1の前にスペースが一つ分入っています。

正規表現にマッチする部分全てを置き換えたいときは最後に g をつけます。

s/\s+/ /g;

となります。

while(<>){
	chomp;
	s/\s+/ /g;
	print"<$_6gt\n";
}

実行すると

1   2   3	ユーザー入力
<1 2 3>

	1   2   3 	ユーザー入力
< 1 2 3>

となります。

置き換える文字列を計算することも出来ます。
例えば、

s/(\d+) (\d+)/$1+$2/e;

として 
実行すると
10  20 	ユーザー入力
<30>

となります。
これは オプションeをつけることによって
プログラムとして見なされ
$1+$2で 10+20を計算して答えを出して 計算結果に置き換えるものです。

*********************************************************************