我有一个看起来像的字符串:
$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);
但是这段代码不会在代码标签之外保存文本。
答案 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);
}
?>