字符串内的文本替换

时间:2012-11-15 06:34:58

标签: php regex

我有一个看起来像的字符串:

$data = '
 Some string
 [code=cpp]
 int a = 5;
 [/code]
 Another string
 [code=php]
 echo "5";
 [/code]';

一个带有两个参数的函数:代码标签和语言中的数据(cpp,php,...):

function Foo($data, $lang) { echo ...RESULT...; }

使用$data功能替换Foo内所有代码标签的最佳方法是什么?结果应该是:

$data = 
 'Some string' . 
 Foo('int a = 5;', 'cpp') .
 'Another string' . 
 Foo('echo "5";', 'php');

function Foo($matches)
{
    echo SOME_ANOTHER($matches[2], $matches[1]);
}
preg_replace_callback('#\[code=(.*?)\](.*?)\[/code\]#si' , 'Foo', $data);

但是这段代码不会在代码标签之外保存文本。

2 个答案:

答案 0 :(得分:0)

function Foo($matches)
{
    return SOME_ANOTHER($matches[2], $matches[1]);
}
echo preg_replace_callback('#\[code=(.*?)\](.*?)\[/code\]#si' , 'Foo', $data);

答案 1 :(得分:0)

我不完全理解你的问题,但这可能会指出你正确的方向。

<?php

$data = '
 Some string
 [code=cpp]
 int a = 5;
 [/code]
 Another string
 [code=php]
 echo "5";
 [/code] closing string';

 $d = preg_replace_callback('#\[code=(.*?)\](.*?)\[/code\]#si' , 'Foo', $data);

 var_dump($d);

 function Foo($matches){

    $code = trim($matches[2]);
    $lang = trim($matches[1]);

    //do what you want with the code ie:  int a = 5;
    //return 'FOO('.trim($code).', '.trim($lang) . ')'; 

    //run the side code...
    return exec($code); 
 }

?>
相关问题