正規表現の利用方法

正規表現を利用することで文字列の中に特定の文字列が含まれているかどうかについてより柔軟に調べることができたり、一致した文字列を取得したりすることができます。ここでは Perl における正規表現の具体的な利用方法を確認する前に、正規表現を使うとどのようなことができるのかについて解説します。

(Last modified: )

正規表現の利用方法

例えば変数に格納された文字列が、ある文字列と完全に同じかどうかを調べるには eq 演算子を使って次のように記述することができます。

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/ になり、文字列の中に "e" はあるのでマッチします。

正規表現では特別な意味を持つメタ文字と呼ばれるものが多数定義されており、通常の文字列とメタ文字を組み合わせてパターンを記述することで、「 a ではじまり g で終わる 3 文字の文字列」や「文字列の最後が .jpg で終わっている文字列」などのようなパターンを定義し、対象の文字列とマッチするか調べることができます。

今回は正規表現の使い方の一つをご紹介しましたが、他にも便利な使い方ができます。では次のページ以降で正規表現の使い方を詳しく見ていきます。

サンプルコード

それでは簡単なサンプルを作成します。

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 =~ /e/){
  print "文字列は「e」を含みます\n";
}else{
  print "文字列は「e」を含みません\n";
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

正規表現の利用方法(1)

文字列と文字列が一致するかどうかを eq 演算子を使って調べ、次に文字列の中に指定したパターンと一致する部分があるかどうかを正規表現を使って調べました。

-- --

Perl で正規表現を使うとどのようなことができるのかについて解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。