<?php
$s = 'あい\\\\うえお';
$re = '/\\\\/';
$rep = '>>match!<<';
$count = 0;
var_dump($s);
preg_match($re, $s, $matches);
var_dump($matches);
//=> array(1) {
// [0]=>
// string(1) "\"
// }
var_dump(preg_replace($re, $rep, $s, $count));
//=> string(17) "あい\\うえお"
var_dump($count);
//=> int(0)
?>
preg_match()ではマッチしているようです。
しかし、同じ正規表現を用いた preg_replace() では置換が行われません。
なぜ置換が行われないのでしょうか?
//間違い var_dump(preg_replace($re, $rep, $s, $count)); //正しい var_dump(preg_replace($re, $rep, $s, -1, $count));
preg_replace の第4引数は置換回数の上限です。置換回数の取得用変数の指定は5番目。
置換回数の上限を0としているので、置換されなくて当然です。
置換自体は preg_replace() を避け、
preg_match() の $matches を利用して実現できましたので、
preg_replace() で置換が行われない理由だけでも十分です。
わかりづらくてすみません。
間違いというか、PHP 5.1.0 からの仕様なので
PHP4 のサーバーならそのままで変換されるはず。
http://jp2.php.net/manual/ja/function.preg-replace.php