2017-01-24 6 views
1

제가preg_replace. 함수에서 0을 사용하는 방법?

$x = preg_replace('/\[\[\[(.+)\]\]\]/', 
    (new ButtonGroupWidget(['idsForLoad' => ['\0']]))->run(), 
    $code); 

생각처럼, preg_replace이다에서 제 2 가변으로 클래스 방법을 사용할 대신 [[[버튼 ID]의 단추를 생성한다. 예, 이상하게 보입니다.) 그리고

+1

콜백 함수를 선언하고'preg_replace_callback'을 사용하십시오. –

+0

감사합니다. 완벽하게 맞습니다! – Teo

+0

답변을 올리십시오. 해결 된 문제를 정확하게 마무리하십시오. – Teo

답변

1

preg_replace_callback을 사용하고 문자열 대체 패턴 대신 콜백 함수를 해당 함수에 전달할 수 있습니다. match 객체 인수를 $m으로 정의하면 전체 일치 항목은 $m[0]에 있습니다.

function repl($m) { 
    return (new ButtonGroupWidget(['idsForLoad' => [$m[0]]]))->run(); 
} 
$code = "[[[btn1]]] [[[btn2]]]"; 
$x = preg_replace_callback('/\[\[\[(.+?)]]]/', 'repl', $code); 

는 또한 [[[]]] 사이의 가장 짧은 문자열을 일치하도록 정규식을 적용 할 정규식에 게으른 도트 일치하는 패턴을 사용하는 것이 좋습니다. 여기서 ]을 이스케이프 할 필요는 없습니다.