这个 preg_replace 命令有什么问题?

发布于 2024-10-17 07:53:46 字数 350 浏览 2 评论 0原文

我有这些代码:

$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();替换为空(空字符串)。

I have these codes:

$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';
}

I think they reach my mean from them. I want to replace tt(); with its output.I expected it works but tt(); replace with nothing(null string).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

寂寞美少年 2024-10-24 07:53:46

来自 PHP 文档: https://www.php.net/manual/en /function.eval.php

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

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

eval 应谨慎使用。请参阅 php 中的 eval 什么时候是邪恶的?

From the PHP documentation: https://www.php.net/manual/en/function.eval.php

eval() returns NULL unless return is called in the evaluated code, in which case the value passed to return is returned.

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

eval should be used with caution. See When is eval evil in php?

相思碎 2024-10-24 07:53:46

$d = eval($func);

应该是

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

$d = eval($func);

should be

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

好久不见√ 2024-10-24 07:53:46

你的正则表达式没问题。您的问题出在 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;

Your regular expressions are fine. Your problem is with the eval() statement. It does not return a value like you expect. The assignment needs to happen in the eval() as well.

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文