PHPにおけるデリミタのエスケープ
文字が特殊文字でない場合、それをデリミタとして使用すると、 正規表現内でその文字自体をエスケープする必要があります。 例を見てみましょう。
デリミタとしてハッシュ記号(#)を使用し、 正規表現内でアンパサンド記号(&)を検索するとします。 アンパサンドは特殊文字ではないため、エスケープしません:
<?php
echo preg_replace('#a&b#', '!', 'a&b'); // '!'を出力
?>
次に、デリミタがアンパサンドで、 正規表現内にもアンパサンドが必要な場合を考えます。 この場合、内部のアンパサンドをエスケープする必要があります。 そうしないと、PHPエラーが発生します:
<?php
echo preg_replace('&a\&b&', '!', 'a&b'); // '!'を出力
?>
次のコードの間違いを修正してください:
<?php
echo preg_replace('#a#b#', '!', 'a#b');
?>