本文へスキップ
BecomeCoder

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

キャプチャ ― ( ) で取り出す

ブラウザで完結

導入

マッチした部分を取り出したいことはよくあります。パターンの一部を ( ) で囲むと、その部分が変数 $1, $2, … に入ります。

説明

マッチが成功すると、( ) で囲んだ部分が左から順に $1$2……で参照できます。

use strict;
use warnings;

my $date = "2024-08-15";

if ($date =~ /(\d+)-(\d+)-(\d+)/) {
    print "年: $1\n";     # 2024
    print "月: $2\n";     # 08
    print "日: $3\n";     # 15
}

/g フラグ(グローバル)を付けてリストで受けると、すべてのマッチ(やキャプチャ)を一度に配列へ集められます。

use strict;
use warnings;

my $text = "cat=3, dog=5, bird=2";
my @nums = ($text =~ /(\d+)/g);      # すべての数字
print "@nums\n";                     # 3 5 2

my $sum = 0;
$sum += $_ for @nums;
print "合計 $sum\n";                  # 10

やってみよう

$date の形式やパターンの ( ) の位置を変えて、$1$3 に何が入るか確かめましょう。

演習

my $s = "name: Taro"; から、(\w+) を使って : のうしろの名前を取り出し、$1 を表示してください(結果は Taro)。

ヒント1を見る

if ($s =~ /:\s*(\w+)/) { print "$1\n"; }

実際に動かしてみよう

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

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

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