パターンにマッチした部分を別の文字列に置換する

正規表現では対象の文字列がパターンとマッチするかどうかを調べるだけでなく、パターンとマッチした部分を別の文字列に置換することができます。ここでは Perl の正規表現でパターンにマッチした部分を別の文字列に置換する方法について解説します。

(Last modified: )

置換演算子を使ってパターンとマッチした部分を置換する

正規表現のパターンがマッチした部分を別の文字列に置換するには次の書式を使用します。

変数 =~ s/パターン/置き換え文字列/

=~ 演算子の左側に記述した変数に可能されている文字列が、演算子の右側に記述したパターンとマッチするかどうかを調べ、マッチした場合はマッチした部分を置き換え文字列に指定した文字列に置換します。置換された後の文字列が変数に格納されます。

次の例を見てください。

my $str = "東京都練馬区赤坂";
$str =~ s/練馬区/港区/;
print $str;

対象の文字列の中に /練馬区/ とマッチする部分があった場合は、マッチした部分を "港区" に置換します。結果として "東京都港区赤坂" が画面に表示されます。

なお対象の文字列の中で複数マッチする部分があった場合でも、置換されるのは最初にマッチした部分だけです。次の例を見てください。

my $str = "red blue red green";
$str =~ s/red/RED/;
print $str;

対象の文字列の中に /red/ とマッチする部分は 2 個所ありますが、置換されるのは最初にマッチした部分だけです。結果として "RED blue red green" が画面に表示されます。

※ 対象の文字列にマッチする全ての部分を置換するには「/g」修飾子を指定します。詳しくは「複数回マッチする(「/g」修飾子)」を参照されてください。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my $filename = "flower.jpeg";
print $filename."\n";

$filename =~ s/jpeg$/png/;
print $filename."\n";

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

パターンにマッチした部分を別の文字列に置換する(1)

パターンとマッチした部分を別の文字列に置換しました。

-- --

Perl の正規表現でパターンにマッチした部分を別の文字列に置換する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。