[PHP-users 32683] Re: e 修飾子のジレンマ
Shima Shizuo
r6 @ chubu.interq.or.jp
2007年 9月 28日 (金) 13:18:59 JST
こんにちは、嶋です。
「'」で囲うとエスケープするのって、余計なお節介って気がしますね。。
>このようなジレンマを解消するにはどうすればいいのでしょうか。
●方法1
・"$"を一致させないような正規表現を使用する
・"$"を後でくっつける
・後方参照を「"」で囲う。
$string = '$string = "hoge";';
$string1 = preg_replace('#^\$(.*)$#e', 'nl2br("$"."\\1")', $string);
echo $string1 . "\n"; // => $string = "hoge";
●方法2
・preg_replace_callbackを使用する
・callback関数はcreate_functionで定義すると楽
$string = '$string = "hoge";';
$new_func = create_function('$matches', 'return $matches[1];');
$string2 = preg_replace_callback("#^(.*)$#", $new_func, $string);
echo $string2 . "\n"; // => $string = "hoge";
# 簡単にするために、当初のコードから変更している箇所があります。
ひょっとしたらそれが原因でなにか悪さしてるかも..
----
Shima Shizuo r6 @ chubu.interq.or.jp
PHP-users メーリングリストの案内