パターンマッチ演算子の区切り文字を指定する

パターンマッチ演算子を使ってパターンを記述する場合、「/パターン/」または省略せずに記述する場合は「m/パターン/」と記述します。この場合区切り文字として「/」を使用していますが、別の記号を区切り文字に使用することもできます。ここでは Perl の正規表現でパターンマッチ演算子を使用するときの区切り文字を指定する方法について解説します。

※ パターンマッチ演算子の基本的な使い方については「パターンマッチ演算子を使ったパターンの記述」を参照されてください。

(Last modified: )

パターンマッチ演算子の区切り文字

パターンマッチ演算子の区切り文字はデフォルトでは "/" を使用します。また区切り文字として "/" を使用した場合は先頭の "m" を省略することができます。

m/パターン/
/パターン/

パターンマッチ演算子の区切り文字は記号の文字であればどのような区切り文字でも使用できます。例えば "!" や "@" や "%" を使用した場合は次のようになります。区切り文字は最初と最後に同じ記号を使います。

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

また次の 4 つについては区切り文字が最初と最後が同じ記号でなくても使用することができます。例えば "(" を使用する場合は終わりの記号として ")" を使用します。

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

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

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

/abc\/def/

もしパターンの中に区切り文字として使っている文字が多く含まれている場合は、ひとつひとつエスケープするよりも区切り文字を別の文字に変更した方がシンプルに記述できます。

m(abc/def)
サンプルコード

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

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

my $str1 = "Happy";
my $str2 = "Red/Blue";

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

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

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

perl sample.pl

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

パターンマッチ演算子の区切り文字を指定する(1)

最初に別の区切り文字を使ってパターンマッチ演算子を使って対象の文字列とマッチするか調べました。次にパターンの中に区切り文字に使用している文字と同じ文字がある場合に、区切り文字をエスケープしてマッチするかどうか調べました。

-- --

Perl の正規表現でパターンマッチ演算子を使用するときの区切り文字を指定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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