2012-07-17 3 views
-1

I가 다음 코드PHP : preg_replace_callback은 결과의 순서를 변경

return preg_replace_callback(
    "#\{gallery: '(.+?)'(?: dir: ([0-1]))?\}#i", 
    create_function('$i', 'echo $i[1];'), 
    $string); 

내 문제는 내 문자열은 다음과 같은 경우 : 그것은 다음과 같습니다 렌더링됩니다

top 
{gallery: 'images/'} 
center 
{gallery: 'images/characters'} 
bottom 

:

images/ 
images/characters 
top center bottom 

왜 주문이 변경되고 교체 된 코드가 맨 위에 있고 다른 모든 것은 b ottom, 심지어 중간에있는 것?

+0

이 질문에 오히려'nsregularexpression'보다는'regex' 태그가 안? – galymzhan

+0

고정, 죄송합니다 ^^ –

+2

은 콜백 함수에서'echo'하지 말고'return' – Lake

답변

2

귀하는 교체 콜백 내부 return 문을 사용한다 :

$string = "top {gallery: 'images/'} center {gallery: 'images/characters'} bottom"; 
$string = preg_replace_callback(
    "#\{gallery: '(.+?)'(?: dir: ([0-1]))?\}#i", 
    create_function('$i', 'return $i[1];'), 
    $string 
); 
echo $string . PHP_EOL; 

// Outputs: top images/ center images/characters bottom 
+0

2012 년입니다. PHP에 [익명 함수] (http://php.net/manual/en/functions.anonymous.php)가 있습니다 – Phil

+0

@ Phil : 내 서버가 5.2에서 실행 중입니다 :/ –

+0

@galymzhan이 문제는 고쳐졌습니다. –

관련 문제