今日は Perl の「正規表現」を覚えます。「セーキヒョーゲン」というと何やら難しそうですが、何のことは無い、指定した文字が検査する対象に含まれているかをチェックするだけです。文字の指定方法の事を「正規表現」と呼んでいます。

この機能を使うと、Webフォームの入力形式チェックや、スパムブロック、また、ファイルの形式チェックなどが行えます。

同様の機能は他のプログラミング言語にもありますが、Perl のこの文字チェック機能は非常に強力で効率が良く、一旦使い始めると Perl に惚れ直すこと間違いなしです。

特定の文字列をマッチさせる正規表現

では早速、サンプルコードで練習しましょう。ちなみに、正規表現で指定した文字列がヒットした場合、これを「マッチした」と表現します。

まず以下のコードでプログラムを作成して実行して下さい。
#正規表現の練習プログラム

use strict;
use warnings;
use utf8;
binmode STDOUT, 'encoding(utf8)'; #Windows の場合は utf8 -> cp932

while(<DATA>){
print $_;
}

__DATA__
1,株式会社山田商事,123-0094,東京都杉並区高円寺東3-3-3
2, (株) 鈴木貿易,987-0021,大阪府大阪市南区島中9-9-9
3,三晃珈琲有限会社,0032912,北海道札幌市北東12条3
4,株式会社鈴木貿易,9870021,大阪市南区島中9-9-9
実行すると、「__DATA__」と書いた行の下に入力してあるデータ (CSV形式) がそのまま出力されましたね。

「__DATA__」というのは Perl の便利な機能の一つで、この行の下の内容はプログラムではなく外部ファイルのように扱われ、ファイルハンドル「DATA」でその内容を読み込めるのです。プログラムの動作をテストする時には大変便利ですのでぜひ活用して下さい。

さて、本題の正規表現の練習に戻ります。ここでは、__DATA__ 以下の内容が、正規表現で形式チェックを行う CSV ファイルの中身だと想定しましょう。現在はまだ CSV の全ての行がそのまま表示されます。これを「株式会社」という記載がある行だけ抜き出すようにしましょう。例えば、「株式会社」を「(株)」に統一したいから、といった理由です。何番目の行にそのような記載があるかを調べるために、while の部分を書き換えます。
while(<DATA>){
$_ =~ m/株式会社/
and print $_;
}
今度は、以下の2行が出力されましたね。1行目と4行目です。
1,株式会社山田商事,123-0094,東京都杉並区高円寺東3-3-3
4,株式会社鈴木貿易,9870021,大阪市南区島中9-9-9

次は>正規表現の基本書式