導入
正規表現は、いくつかの「部品」を組み合わせて作ります。この回で、よく使う文字クラスと「何個くり返すか」を表す量指定子をまとめます。
説明
代表的な部品は次のとおりです。
- 文字クラス:
\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";。