KAIHATSUGIKEN GROUP
****************************************************************************************
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を計算して答えを出して 計算結果に置き換えるものです。
*********************************************************************