调用函数作为 preg_replace() 的替换参数

问题描述 投票:0回答:3

我有一个复杂的问题: 我有一个很长的文本,我需要在文本中调用一些 php 函数。 函数名称是 myfunction(); 我们通过以下方式在文本中包含该函数: “文本文本文本myfunction[1,2,3,4,5];更多文本文本...”

我想将每个 myfunction[...] 替换为函数 myfunction 的结果以及 [] 括号中的变量。

我的代码是:

<?php echo preg_replace('/myfunction[[0-9,]+]/i',myfunction($1),$post['content']); ?>

,但它不起作用。

参数应该是一个数组,因为它可以包含任意数量的值。

php callback preg-replace
3个回答
1
投票

如果我是您,我会避免使用

e
修饰符来
preg_replace
,因为它可能会导致您执行任意代码。请使用
preg_replace_callback
代替。它稍微冗长一些,但更有效:

echo preg_replace_callback('/myfunction\[([0-9,]+)\]/i', function($matches) {
    $args = explode(',', $matches[1]); // separate the arguments
    return call_user_func_array('myfunction', $args); // pass the arguments to myfunction
}, $post['content']);

这使用了匿名函数。如果您使用 5.3 之前的 PHP 版本,则此功能将无法使用。您必须创建一个命名函数并按照手册页上的说明使用它。


0
投票

您可以使用

preg_replace()
的“e”修饰符(用于 EVAL),如下所示:

$text = preg_replace('/myfunction\[(.*?)\]/e', 'myfunction("$1")', $text);

我并没有真正了解您的数据的结构,因此目前我只能尽力帮助您。您可以探索该解决方案。

来自 PHP 手册

e(PREG_REPLACE_EVAL) 如果设置了此修饰符,则 preg_replace() 对替换字符串中的反向引用进行正常替换,将其计算为 PHP 代码,并使用结果替换搜索字符串。单引号、双引号、反斜杠 () 和 NULL 字符将在替换反向引用中通过反斜杠转义。


-1
投票

您需要在正则表达式中添加“e”修饰符、转义

[
]
并将第二个参数字符串化。

preg_replace('/myfunction\[[0-9,]+\]/ei','myfunction("$1")',$post['content']);
© www.soinside.com 2019 - 2024. All rights reserved.