使用数据库中的值替换字符串中的自定义标记

时间:2013-08-01 08:32:39

标签: php regex

我需要做的是解析类似于此的字符串:

  

{A} 3 {/ A} * {B} 4 {/ B}

或者

  

{A} 3 {/ A} / {B} 2 {/ B}×100

我需要在该字符串中用数据库中的实际值替换标记中的那些值,第一个例子:

SELECT value FROM table WHERE id = 3;

SELECT value FROM table WHERE id = 4;

此功能:

preg_replace_callback('/(?>{([^}]+)})(.*)?{\/\1}/sim', 'find_tags_callback', $string);

实际上返回字符串中包含的id,问题是我卡在那里。在伪代码中,我需要:

从字符串中提取第一个id。

运行我的查询。

用正确的值替换该id。

[对所有标签执行相同操作]

完成返回内部正确值的初始字符串。 第一个可能是

  

10 * 3

第二个

  

九十零分之四十零* 100

任何想法如何做到这一点,我完全陷入困境。

由于

1 个答案:

答案 0 :(得分:1)

执行数据库查询以获取所有值,并将它们放入键入ID的数组中。在下面的代码中,我假设数组名为$tags

$new_string = preg_replace_callback('/\{([^}]+)\}(.+?)\{/\1\}/sim', 
    function ($match) use ($tags) {
        return $tags[$match[2]];
    }, $string);

use ($tags)声明允许函数引用外部变量$tags