[PHP-users 7598] preg_replace の動作について

php-users@php.gr.jp php-users@php.gr.jp
Mon, 20 May 2002 15:37:47 +0900


こんにちは。福田と申します。

preg_replaceの仕様について、ご存知の方がいらっしゃいましたら、
教えていただけないでしょうか?

下記のようなソースを実行すると...
------------------------------------------------------------
<?php

function nonaction($val){
  return $val;
}

$str= sprintf("%s %s\n",
              '"TEST"', "'TEST'");

print $str;

print preg_replace('/^(.*)$/', "$1", $str);

print preg_replace('/^(.*)$/e', "nonaction('$1')", $str);                       

print preg_replace('/^(.*)$/e', 'nonaction("$1")', $str);                       

?>
------------------------------------------------------------

下記のような結果が返ってきます。
------------------------------------------------------------
"TEST"	'TEST'
"TEST"	'TEST'
\"TEST\"	'TEST'
"TEST"	\'TEST\'
------------------------------------------------------------


3番目,4番目のように「/e」修飾子をつけた場合、replacementに書いた
PHPコードの「'"」の書き方によって参照内容の「'"」に「\」が付加されて
しまいます。


これが、仕様であれば そう思ってプログラムを書くまでなのですが、
どうなんでしょうか?

「設定で変更可能」、「使い方が悪い」、「バグです」などなど
どなたかご存知の方がいらっしゃいましたら、教えてください。

ちなみに、動作環境ですが、

php-4.1.2
 -> RedHat6.1J

php-4.2.0 + 国際化パッチ(藤本さん)
 -> RedHat7.2J

で、確認しました。

php.iniは、php.ini-recommended をベースにしています。
magic_quotes_gpcなど、関係のありそうな箇所はoffになってると思います。


よろしくお願いします。

-- 
Masahiro Fukuda mailto:masahif@ynot.co.jp