LoginSignup
4

More than 5 years have passed since last update.

正規表現内で変数を展開したときにメタ文字をエスケープする

Last updated at Posted at 2014-10-29

正規表現内で変数を展開するときにハマったのでメモ

以下のように変数\$aが変数\$bを含んでいるはずなのになぜか正規表現の返却値が空文字だった。

my $a = '(error)';
my $b = '(error)';

print $a =~ /${b}/; # ''

どうもメタ文字(カッコ)が文字列中に含まれていることが原因だったようです。
てっきり自動的にエスケープされるものだと思っていました。

なのでテキスト修飾子"\Q"と"\E"を使って明示的にエスケープしたらうまくいった。

my $a = '(error)';
my $b = '(error)';

print $a =~ /\Q${b}\E/; # '1'

参考URL

http://stackoverflow.com/questions/2001176/how-can-i-escape-meta-characters-when-i-interpolate-a-variable-in-perls-match-o
http://www.kent-web.com/perl/chap7.html

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4