PHP置換クイズ!?(mb_ereg_replace)

さて問題です。

ある「¥」を含む文字列 (例:[¥]) を置換して、[¥¥] にしたいと思っています。

#あえて、¥は全角で書いていますが、実際には半角です。

そこで、それっぽい置換を4つほど書いてみました。

$original = "[¥¥]";
$a = str_replace("¥¥", "¥¥¥¥", $original);
$b = mb_ereg_replace("¥¥¥¥", "¥¥¥¥¥¥¥¥", $original);
$c = mb_ereg_replace("¥¥¥¥", "¥¥¥¥", $original);
$d = mb_ereg_replace('¥¥', "¥¥¥¥", $original);

print "a= $a¥n";
print "b= $b¥n";
print "c= $c¥n";
print "d= $d¥n";



さて、期待している置換をしてくれるのは、$a ~ $d のうち、どれでしょう。

出力結果

a= [¥¥]
b= [¥¥¥¥]
c= [¥¥]
d=

ちなみに、d ですが、
Warning: mb_ereg_replace(): mbregex compile err: end pattern at escape in question.php・・・

と、エラーを出していました。

正解しました?

で、なぜこうなってしまうか、わかりますか?



・・・なんてことはない、私がはまったんです。


$c って、分かれば納得もするけど、ぱっと見、置換しないように見えるよなー(笑)



同じカテゴリー(PHP)の記事

この記事へのコメント
駆け出しPHPプログラマーの頃に、¥で大ハマリした経験がありますねー。

PHP本体のエスケープと正規表現でのエスケープと両方掛かってしまうからこうなるんだと思いますが・・・違うかな?
(replace側は正規表現のエスケープがないから2つでよい)
Posted by ルーパスさいとうルーパスさいとう at 2008年08月26日 15:06
>PHP本体のエスケープと正規表現でのエスケープと両方掛かってしまうから

って、ま、そういうことですよね。
わかれば、まぁ、わかるんですけどね。
なんか、抜けてたんですね。日ごろの疲れか!?


・・・って、ちがったら・・・逆に困るな(^^;;;;
Posted by SE風味 at 2008年08月26日 18:08
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

写真一覧をみる

削除
PHP置換クイズ!?(mb_ereg_replace)
    コメント(2)