バックスラッシュの罠
<?php $string = 'aaa\bbb'; $pattern = '' ; $replacement = '' ; echo preg_replace($pattern, $replacement, $string);
の結果を、
aaa\\bbb
としたい場合の$pattern,$replacementの答え
<?php $string = 'aaa\bbb'; $pattern = '/\\\\/'; $replacement = '\\\\\\\\'; echo preg_replace($pattern, $replacement, $string);
一旦、
$pattern = '/\\\\/';
$replacement = '\\\\\\\\';
が文字列リテラルとして評価された際に
'/\\/'
'\\\\'
となって、再度preg_replace()で評価される際に
'/\/'
'\\'
となると言う事で、PHPの正規表現に於いて「\」一つに対応するパターンは「\\\\」となる・・・
なんと言うバッドノウハウ