パターンが文字列とマッチするか調べる

正規表現ではパターンを定義し、対象の文字列がそのパターンと一致する部分があるかどうかを調べます。一致する部分があった場合はパターンが文字れとマッチしたと表現します。ここでは Perl の正規表現でパターンが文字列とマッチするか調べる方法について解説します。

(Last modified: )

パターンが文字列とマッチするか調べる

正規表現のパターンが対象の文字列とマッチするかどうか調べるには次の書式を使用します。

変数 =~ /パターン/

=~ 演算子の左側に記述した変数に可能されている文字列が、演算子の右側に記述したパターンとマッチするかどうかを調べますマッチした場合は式全体として真(true)を返し、マッチしない場合には偽(false)を返します。

式全体が真または偽を返しますので if 文の条件式や while 文の条件式として使用することができます。次の例を見てください。

my $str = "Hello";

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

上記の場合は変数 $str に格納されている文字列が、 =~ 演算子の右側に記述されているパターンとマッチしているかどうかを評価し、マッチしていれば式全体 $str =~ /e/ が真(true)となります。

変数を省略する

文字列がパターンとマッチするか調べるときに、左辺の変数を省略した場合は変数としてデフォルト変数 $_ が対象の変数となります。次の例を見てください。

if ($_ =~ /e/){
  print "文字列に「e」を含みます\n";
}

この場合は、変数などを省略して次のように記述することができます。

if (/e/){
  print "文字列に「e」を含みます\n";
}

例えば標準入力から入力された文字列とパターンがマッチするかどうか調べる場合などは次のように記述できます。

while(<STDIN>){
  if (/q/){
    print "一致しました。終了します\n";
    exit(0);
  }

  print "入力して下さい\n";
}

標準入力から入力された値がデフォルト変数 $_ に格納されます。格納された値と /q/ とマッチするかどうか調べ、マッチした場合はプログラムを終了します。

サンプルコード

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

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

my $address1 = "東京都千代田区";
my $address2 = "東京都港区";

if ($address1 =~ /千代田/){
  print $address1."は「千代田」を含みます\n";
}else{
  print $address1."は「千代田」を含みません\n";
}

if ($address2 =~ /千代田/){
  print $address2."は「千代田」を含みます\n";
}else{
  print $address2."は「千代田」を含みません\n";
}

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

perl sample.pl

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

パターンが文字列とマッチするか調べる(1)

2 つの文字列に対して "千代田" という文字列が含まれるかどうかを調べて結果を表示しています。

-- --

Perl の正規表現でパターンが文字列とマッチするか調べる方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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