php,用函数调用替换文本

时间:2011-04-11 09:01:48

标签: php regex preg-replace

在我定制的cms中,我需要替换从数据库表中选择的部分文本,其中包含:

  

Lorem ipsum dolor sit amet,   奉献精神   {Block}'myfunc',数组(11,   'thumbnail','large',18){/ Block} sed   做eiusmod tempor incididunt ut labore   et dolore magna aliqua

带有{Block}的文本的一部分,应该用将执行函数myfunc的php函数替换,并传递包含所提到的数组的参数。

对我来说,最大的问题是我不知道我将在文本中有多少{Block}以及它们将被放置在哪里。

我知道我可以简单地“爆炸”文字,做一些体操,但我不知道这是不是最好的方法。

我知道这不简单...如果你可以帮助我,请。

提前谢谢你!

2 个答案:

答案 0 :(得分:1)

你可以试试这个

  

str_replace函数( '{}块', '< PHP');
  str_replace函数( '{/块}', '>?');

答案 1 :(得分:1)

我知道,当我想用​​正则表达式做所有事情时,每个人都讨厌我,但我喜欢它:)

$text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit {Block}'myfunc', array(11,'thumbnail','large',18){/Block} sed do eiusmod tempor incididunt ut labore et dolore magna {Block}'myfunc', array(453,'thumbnai23l','small',6458){/Block} aliqua";
function myfunc($data) {
    return '<'.$data[0].'-'.$data[1].'-'.$data[2].'-'.$data[3].'>';
}
preg_match_all("/{Block}'([^,]*)', array\(([^\)]*)\){\/Block}/i", $text, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
    $text = str_replace($match[0],$match[1](explode(",", $match[2])), $text);
}
echo $text;

只是,请确保使用相同的分隔符分隔数组值,在我的情况下只是逗号,在您的情况下,它是逗号+空格。调整你喜欢的任何东西。

这样的东西,可以轻松利用,所以,一定要检查$ match [1]是否在你允许的函数列表中;)