本文へスキップ
BecomeCoder

Perlコース · 第7章 正規表現 · レッスン24

置換 ― s/// で書き換える

ブラウザで完結

導入

見つけたパターンを別の文字列置き換えるのが置換です。s/探す/置き換える/ と書きます。テキスト整形の主役です。

説明

$文字列 =~ s/パターン/置換文字列/; で、最初に見つかった1か所を置き換えます。すべて置き換えるには /g フラグを付けます。置換した回数が返ります。

use strict;
use warnings;

my $s = "I like cats. Cats are cute.";

$s =~ s/cats/dogs/;        # 最初の1か所だけ
print "$s\n";              # I like dogs. Cats are cute.

my $t = "a-b-c-d";
my $n = ($t =~ s/-/_/g);   # すべて置換
print "$t\n";              # a_b_c_d
print "置換した数: $n\n";   # 3

置換文字列の中では $1 などのキャプチャも使えます。日付の区切りを変える例です。

use strict;
use warnings;

my $date = "2024/08/15";
$date =~ s{(\d+)/(\d+)/(\d+)}{$1-$2-$3};   # 区切りを {} にしてもよい
print "$date\n";                            # 2024-08-15

やってみよう

s/// のパターンや置換文字列を書き換えて結果を確かめましょう。/g の有無で置換される数がどう変わるかも見てください。

演習

my $s = "hello world"; について、s/o/0/g ですべての o0 に置き換えて表示してください(結果は hell0 w0rld)。

ヒント1を見る

$s =~ s/o/0/g; のあと print "$s\n";

実際に動かしてみよう

下のエディタにPerlを書いて「実行」を押すと、学習用シミュレータが print / say の出力を表示します(本物のperlではなく、教材の範囲を再現した軽量なエンジンです)。スカラ/配列/ハッシュ・制御構文・サブルーチン・正規表現(=~ / s///)なども動きます。本文の例を書き換えて動かしてみましょう(ファイル入出力・リファレンス・CPANモジュールなど一部の機能は対象外です)。

Perl — ブラウザ内で実行(学習用シミュレータ)

Perlの教材サブセットを動かす学習用シミュレータを読み込みます(本物のperlではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。