что не так с этой командой preg_replace? - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть эти коды:

$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 ();заменить ничем (пустая строка).

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

Из документации PHP: http://au2.php.net/manual/en/function.eval.php

eval () возвращает NULL, если в обработанном коде не вызывается return, и в этом случае возвращается значение, переданное для возврата.

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

eval следует использовать с осторожностью. См. Когда в php eval зло?

1 голос
/ 15 февраля 2011

Ваши регулярные выражения в порядке. Ваша проблема с оператором 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;
1 голос
/ 15 февраля 2011

$d = eval($func);

должно быть

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

...