【Perl5】正規表現(文字列置換)

文字列置換

文字列 $xx の中にある abc という文字列を
すべて大文字の ABC に変換したい場合には下記のように記述します。

最初の s は置換することを表わします。
最後の g を省略した場合は、最初に現れた abc を 1 度だけ置換します。

$xx =~ s/abc/ABC/g;

abc の部分には正規表現を指定することもできます。
(…)を使用すると(…)に対応する文字列を $1, $2, $3,…で参照することができます。

次のように記述すると、"12:34:56″ を “12時34分56秒" に置換します。

$xx = "12:34:56";
$xx =~ s/([0-9][0-9]):([0-9][0-9]):([0-9][0-9])/$1時$2分$3秒/g;

最後の g の部分をオプションと呼びます。
g オプションは、見つかったすべてのパターンを置換します。

$xx = "abcabcabc";
$xx =~ s/abc/ABC/;   # ABCabcabc となります。
$xx =~ s/abc/ABC/g;  # ABCABCABC となります。

eオプションは、ABC の部分を文字列ではなく、
perl の実行文と解釈して、その結果に置換します。
次の例は、12:34:56 を秒数に置換します。

$xx = "12:34:56";
$xx =~ s/([0-9][0-9]):([0-9][0-9]):([0-9][0-9])/$1*3600+$2*60+$3/e;

区切り文字は、アルファベット・数字以外の任意記号を使うことができます。
置換文字中の区切り文字はバックスラッシュを用いてエスケープする必要がありますが、
区切り文字を変更するとエスケープする必要がなくなります。

$xx =~ s/http:\/\/www.yyy.zzz\//http:\/\/aaa.bbb.ccc\//;
$xx =~ s|http://www.yyy.zzz/|http://aaa.bbb.ccc/|;

区切り文字としてシングルクォーテーション使うと、
置換文字の変数解釈などを行わないようになります。

$yy = "YY";
$xx = "999"; $xx =~ s/[0-9]/$yy/g;    # YYYYYY となる
$xx = "999"; $xx =~ s'[0-9]'$yy'g;    # $yy$yy$yy となる

Perl5入門

Posted by 管理人