正規表現の利用方法

広告

まず最初に正規表現がどのような時に利用されるのかを確認しておきます。

例えば変数に格納された文字列が、ある文字列と一致するかどうかを調べるには次のように記述しました。

my $str = "Hello";

if ($str eq "Hello"){
  print "文字列はHelloです¥n";
}else{
  print "文字列はHelloではありません¥n";
}

※「eq」演算子については「関係演算子」を参照して下さい。

このサンプルでは変数に格納された文字列と「Hello」と言う文字列が完全に一致しますので「文字列はHelloです」が出力されます。

それでは変数に格納された値に「e」と言う文字が含まれているかどうかを調べるにはどうすればいいでしょうか。先ほどと同じように「eq」演算子を使って記述してみます。

my $str = "Hello";

if ($str eq "e"){
  print "文字列に「e」を含みます¥n";
}else{
  print "文字列は「e」を含みません¥n";
}

今度のサンプルでは「文字列は「e」を含みません」が出力されてしまいます。それは「eq」演算子が演算子の左辺と右辺が完全に一致している場合にだけ真(true)を返しためです。変数「$str」に格納された値は「e」と言う文字を含みはしますが「e」ではありません。

このように文字列の中に指定した文字が含まれているかどうかを調べる時に正規表現は使用されます。詳しい記述方法は次のページ以降に確認して行きますが、正規表現を使うことで次のように記述することが出来ます。

my $str = "Hello";

if ($str =~ /e/){
  print "文字列に「e」を含みます¥n";
}else{
  print "文字列は「e」を含みません¥n";
}

ここで「/e/」と書かれた部分が正規表現での記述となっています。「e」が一致する条件を示すパターン、パターンを囲んでいる「//」がパターンマッチ演算子、パターンと対象の値がマッチしているかどうかを調べる「=~」が結合演算子です。今回の場合は「e」が含まれているかどうかを調べ、含まれている場合は真(true)を返します。

正規表現として記述できるパターンは、単なる文字列が含まれているかどうかだけではなく、行頭にあるものや、ある文字が1回以上続けて記述されているものなど複雑な条件が指定できるようになっています。では次のページ以降で正規表現の使い方を詳しく見ていきます。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test1-1.pl

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my $str = "Hello";

if ($str eq "Hello"){
  print "文字列はHelloです¥n";
}else{
  print "文字列はHelloではありません¥n";
}

if ($str eq "e"){
  print "文字列に「e」を含みます¥n";
}else{
  print "文字列は「e」を含みません¥n";
}

if ($str =~ /e/){
  print "文字列に「e」を含みます¥n";
}else{
  print "文字列は「e」を含みません¥n";
}

上記を「test1-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。

正規表現の利用方法

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)