2012-11-15 4 views
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...; } 

Foo 기능을 사용하여 $data 내부의 모든 코드 태그를 대체하는 가장 좋은 방법은 무엇입니까? 그 결과는 다음과 같아야합니다

$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

http://www.php.net/manual/en/function.preg-replace-callback.php –

+0

@TahirYasin 알았어, 고맙습니다. – Ockonal

답변

0
function Foo($matches) 
{ 
    return SOME_ANOTHER($matches[2], $matches[1]); 
} 
echo preg_replace_callback('#\[code=(.*?)\](.*?)\[/code\]#si' , 'Foo', $data); 
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); 
} 

?>