正規表現の基本書式
正規表現の基本書式は以下の通りになります。検査対象 =~ m/検索キーワード/プログラム内では、以下の部分ですね。
$_ =~ m/株式会社/もし検索キーワードが検査対象内でマッチすれば、サンプルプログラム上では「and print...」まで実行が続き、行が出力されます。
正規表現を「パターン」で指定する
さて、1行目と4行目に望まない記載「株式会社」がある事は分かりました。ただこの結果を見ると、ちょっと他の事も気になってきますね。郵便番号が「123-0094」と3桁-4桁に区切られているものと「9870021」と7桁つながっているものがあります。これは「3桁-4桁」にしておきたいですね。このような場合はどのように指定すれば良いのでしょうか? もし先ほどと同じように
$_ =~ m/9870021/と指定してしまったらこの番号にしかマッチしないので、あまり意味がありませんね。
このような場合は、文字の「パターン」を指定します。パターンとは、グループ化した特定の文字が何個続くかを指定したものです。
「グループ」というのは、「数字」や「アルファベット」のような一般的な文字種類の他、「『ね』か『こ』」など、個々の文字をグループとして指定できます。
CSV中の郵便番号の例だと、チェックするパターンは「数字が7個連続したもの」という事になります。これを正規表現で指定すると、以下のようになります。
while(<DATA>){ $_ =~ m/,[0123456789]{7},/ and print $_; }このように変更したプログラムを実行すると今度は以下の2行が出力されます。
3,三晃珈琲有限会社,0032912,北海道札幌市北東12条3 4,株式会社鈴木貿易,9870021,大阪市南区島中9-9-9期待通り、ハイフンなしで郵便番号が記載されている行が抽出されていますね。数字のパターンの異なるデータ行を追加して結果を試してみて下さい。
次は>正規表現パターン指定の文法