如何在php中使用preg_replace用函数结果替换文本?

时间:2011-09-18 11:48:52

标签: php preg-replace

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

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

我的代码是:

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

,但它没有用。

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

3 个答案:

答案 0 :(得分: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版本,则无法使用此功能。您必须创建一个命名函数,并根据手册页上的说明使用它。

答案 1 :(得分:0)

您可以使用preg_replace()的“e”修饰符(对于EVAL),如下所示:

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

我并没有真正了解您的数据结构,所以我现在只能帮助您。您可以探索该解决方案。

来自PHP Manual

  

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

答案 2 :(得分:-1)

您需要在正则表达式中添加“e”修饰符,转义[],并将第二个参数字符串化。

preg_replace('/myfunction\[[0-9,]+\]/ei','myfunction("$1")',$post['content']);