0

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

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

还有一个接受 2 个参数的函数:代码标签内的数据和语言(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);

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

4

2 回答 2

0
function Foo($matches)
{
    return SOME_ANOTHER($matches[2], $matches[1]);
}
echo preg_replace_callback('#\[code=(.*?)\](.*?)\[/code\]#si' , 'Foo', $data);
于 2012-11-15T07:06:11.053 回答
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); 
 }

?>
于 2012-11-15T07:26:25.253 回答