パターンの中のエスケープ処理

広告

パターンの中には任意の文字を記述することが出来ますが、メタ文字と呼ばれる特殊な用途で使用される文字にはエスケープ処理が必要となります。

¥ * + . ? { } ( ) [ ] ^ $ - | /

これらの文字はパターンの中で使用されると特別な意味を持ちます。そこで単なる文字として扱いたい場合には「¥」記号を使ってエスケープ処理を行います。例えば次のように記述します。

¥¥
¥*
¥|

この中で「/」についてはパターンマッチ演算子の区切り文字を「/」以外にした場合は必要ありません。(パターンマッチ演算子については「パターンマッチ演算子(m//)」を参照して下さい)。

また「-」については[]の中で使用される場合にだけ特別な意味を持つため、[]の中で使用される時にエスケープ処理が必要となります。

エスケープシーケンス

パターンはダブルクオーテーションで囲った文字列と同じように扱われます。その為、次のようなエスケープシーケンスも利用出来ます。

¥a        警報音
¥n        改行
¥r        復帰
¥f        改ページ
¥t        水平タブ
¥e        ESC
¥ooo      8進数
¥xhh      16進数
¥cX       コントロール文字(¥cCならCtrl+C)
¥l文字    文字を小文字
¥u文字    文字を大文字
¥L...¥E   ...を小文字
¥U...¥E   ...を大文字
¥Q...¥E   ...の中のメタ文字をエスケープ

また「$」及び「@」についてはメタ文字としての使用や、パターンの中に変数や配列を展開する時にも使用される文字のため注意が必要です。また詳しい解説は後のページで行います。

他にも特別な意味を持つエスケープシーケンスが用意されていますが、必要になった時に随時解説していきます。

サンプルプログラム

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

test5-1.pl

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

my $str = "[the]";

print "対象:$str¥n";

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

$str = "ab¥tcd";

print "対象:$str¥n";

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

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

パターンの中のエスケープ処理

( Written by Tatsuo Ikura )