这个preg_replace命令有什么问题?

时间:2011-02-15 07:02:43

标签: php preg-replace eval

我有这些代码:

$string = 'Hello [*tt();*], how are you today?';
preg_match("/\[\*(.*?)\*\]/",$string,$match);
$func = $match[1];
$d = eval($func);
$newstring = preg_replace("/\[\*(.*?)\*\]/",$d,$string);
echo $newstring;

function tt() {
     return 'test';
}

我认为他们从他们那里得到了我的意思。我想替换tt();与它的输出。我期望它的工作,但tt();替换为空(null string)。

3 个答案:

答案 0 :(得分:3)

来自PHP文档:http://au2.php.net/manual/en/function.eval.php

eval()返回NULL,除非在计算代码中调用return,在这种情况下返回传递给return的值。

$d = eval("return $func");

eval应谨慎使用。见When is eval evil in php?

答案 1 :(得分:1)

$d = eval($func);

应该是

eval('$d = ' . $func);

答案 2 :(得分:1)

你的正则表达式没问题。您的问题在于eval()声明。它不会返回您期望的值。分配也需要在eval()中进行。

function tt() {
     return 'test';
}

$string = 'Hello [*tt();*], how are you today?';
preg_match("/\[\*(.*?)\*\]/",$string,$match);
$func = $match[1];
eval('$d = ' . $func);
$newstring = preg_replace("/\[\*(.*?)\*\]/",$d,$string);
echo $newstring;