パターンマッチ演算子(m//)

広告

前のページでパターンを定義する場合には「/」と「/」の間に挟んで指定すると記述しました。この「//」はパターンマッチ演算子と呼ばれるもので、演算子としては「m//」と言うのが正式な記述方法です。

m/パターン/

ここで「/」は区切り文字(デリミタ)として使用され、パターンマッチ演算子は「m」+「区切り文字」+パターン+「区切り文字」と言う構成になります。デフォルトの区切り文字は「/」を使用していますが「/」を使用した場合だけ先頭の「m」を省略して「/パターン/」として使用することが出来ます。

m//演算子の区切り文字

区切り文字はペアになっている記号の文字であればどのような区切り文字でも構いません。

m!パターン!
m@パターン@
m%パターン%

また次の4つについては同じ記号でなくても使用することが出来ます。

m(パターン)
m{パターン}
m[パターン]
m<パターン>

パターンの中にある区切り文字のエスケープ

パターンの中に区切り文字と同じ文字が含まれていた場合は「¥」記号を使ってエスケープします。例えば「abc/def」と言うパターンを定義したい場合には次のように記述します。

/abc¥/def/

もしエスケープする文字が多いようであれば別の区切り文字を使った方がシンプルに記述できます。

m(abc/def)

サンプルプログラム

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

test4-1.pl

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

my $str = "abcdedcba";

print "対象:$str¥n";

if ($str =~ m@cde@){
  print "cdeにマッチします¥n";
}else{
  print "cdeにマッチしません¥n";
}

$str = "ab/ddef/edf/abc";

print "対象:$str¥n";

if ($str =~ m(ef/e)){
  print "ef/eにマッチします¥n";
}else{
  print "ef/eにマッチしません¥n";
}

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

パターンマッチ演算子(m//)

( Written by Tatsuo Ikura )