本文へスキップ
BecomeCoder

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

パターンの部品 ― 文字クラスと量指定子

ブラウザで完結

導入

正規表現は、いくつかの「部品」を組み合わせて作ります。この回で、よく使う文字クラスと「何個くり返すか」を表す量指定子をまとめます。

説明

代表的な部品は次のとおりです。

  • 文字クラス: \d(数字)・\w(英数字と _)・\s(空白)・.(任意の1文字)・[abc](a か b か c)
  • 量指定子: +(1回以上)・*(0回以上)・?(0か1回)・{n}(ちょうどn回)
  • 位置: ^(行頭)・$(行末)
use strict;
use warnings;

my @inputs = ("abc123", "hello", "42", "a1b2");

foreach my $s (@inputs) {
    if ($s =~ /^\d+$/) {          # 全部が数字
        print "$s : 数字だけ\n";
    } elsif ($s =~ /\d/) {         # 数字を含む
        print "$s : 数字を含む\n";
    } else {
        print "$s : 数字なし\n";
    }
}

郵便番号のような「決まった桁数」は {n} で表せます。

use strict;
use warnings;

my $zip = "150-0001";
if ($zip =~ /^\d{3}-\d{4}$/) {     # 3桁-4桁
    print "正しい郵便番号の形です\n";
}

やってみよう

@inputs文字列やパターンの量指定子(+*{2} に変えるなど)を書き換えて、判定がどう変わるか確かめましょう。

演習

my @list = ("cat", "c4t", "coooot", "dog"); から、grep と正規表現 /^c.*t$/(c で始まり t で終わる)に合う要素だけを取り出し、"@m" の形で表示してください(結果は cat c4t coooot)。

ヒント1を見る

my @m = grep { $_ =~ /^c.*t$/ } @list; のあと print "@m\n";

実際に動かしてみよう

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

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

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