Perl正規表現で利用できる便利なエスケープシーケンスとして、\Qと\Eがあります。これはメタ文字の解釈を止めたり、その解釈を再開したりするものです。「man perlre」には次のような例が出てきます。
/$unquoted\Q$quoted\E$unquoted/
この正規表現は変数$unquotedと$quotedの値を利用しますが、利用のされかたが異なります。$unquotedの値はそのまま正規表現として解釈されますが、$quotedの値は文字列一致となります。
#!/usr/bin/perl -w use strict; use Data::Dumper; my $quoted = '.?'; my $unquoted = '.'; my $subject = "a.?a"; print $subject =~ /^$unquoted\Q$quoted\E$unquoted$/; # 1
また、\Qや\Eの解釈は変数展開と別のタイミングで行われるので、$quotedの値に\Eを入れてもメタ文字の解釈が停止したりはしません。単に「\E」の2バイトにマッチするだけです。
文字列の一部をユーザーの入力値そのものとマッチさせたい場合など、Perl正規表現では重宝する書き方です。
PCRE関数での\Qと\E
一方、PHPにもPCRE(Perl互換正規表現ライブラリ)を利用する関数群があり、\Qや\Eを利用することができます。実際、次のような場合はPerlと同じように動作します。