パターンマッチ演算子を使ったパターンの記述

正規表現では文字列にパターンがマッチするかどうかを調べます。このパターンを記述するときに使用するのがパターンマッチ演算子です。ここでは Perl の正規表現でパターンマッチ演算子を使ったパターンの記述方法について解説します。

(Last modified: )

パターンマッチ演算子とは

パターンを定義する場合には // の間に文字列や特別な意味を持つ文字を記述しますが、この // はパターンマッチ演算子と呼ばれるもので、演算子としては m// と言うのが正式な記述方法です。

m/パターン/

ここで / は区切り文字(デリミタ)として使用され、パターンマッチ演算子は "m"+"区切り文字"+パターン+"区切り文字" と言う構成になります。

区切り文字として / を使用した場合だけ先頭の "m" を省略して /パターン/ として使用することができます。

/パターン/

※ パターンマッチ演算子の区切り文字は "/" 以外の文字にすることができます。詳しくは「パターンマッチ演算子の区切り文字を指定する」を参照されてください。

パターンを記述する

区切り文字として "/" を使用した場合はパターンは次のように記述できます。

/パターン/

パターンの中には通常の文字列から特別な意味を持つメタ文字を記述することができます。例えば通常の文字列として文字を 1 文字だけ記述すると次のようになります。

/a/

このパターンを使って対象の文字列とマッチするかどうか調べると、対象の文字列に "a" が含まれている場合はマッチします。

〇 apple
〇 black
× white

次にパターンに複数の文字を記述した場合です。

/ow/

このパターンを使って対象の文字列とマッチするかどうか調べると、対象の文字列に "ow" が含まれている場合はマッチします。("o", "w" の 2 文字がどこか含まれているかどうかという意味ではなく、 "ow" という単語が含まれている場合にマッチします)。

〇 owner
〇 down
× woman

次にパターンに特別な意味を持つメタ文字と通常の文字を組み合わせて記述した場合です。

/^ow/

文字列の先頭位置にマッチするメタ文字 ^ と、通常の文字列 "ow" を組み合わせてパターンを指定しています。このパターンを使って対象の文字列とマッチするかどうか調べると、対象の文字列の先頭から "ow" が含まれている場合はマッチします。先頭以外の位置に "ow" があってもマッチしません。

〇 owner
× down
サンプルコード

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

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

my $str1 = "owner";
my $str2 = "woman";

if ($str1 =~ /ow/){
  print $str1."は /ow/ とマッチします\n";
}else{
  print $str1."は /ow/ とマッチしません\n";
}

if ($str2 =~ /ow/){
  print $str2."は /ow/ とマッチします\n";
}else{
  print $str2."は /ow/ とマッチしません\n";
}

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

perl sample.pl

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

パターンマッチ演算子を使ったパターンの記述(1)

2 つの文字列がそれぞれパターンとマッチするかどうかを調べ、結果を画面に出力しました。

-- --

Perl の正規表現でパターンマッチ演算子を使ったパターンの記述方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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