preg_replace。如何在函数中使用 \0?

preg_replace. How to use \0 in function?

我想使用 class 方法作为 preg_replace 中的第二个变量,比如

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

想法是生成按钮而不是 [[[按钮 id]]]。是的,这有点奇怪)是的,我知道什么是聪明)

您可以使用 preg_replace_callback 并将回调函数而不是字符串替换模式传递给该函数。如果将匹配对象参数定义为 $m,则整个匹配项将驻留在 $m[0].

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

我还建议在正则表达式中使用惰性点匹配模式来强制正则表达式匹配 [[[]]] 之间的最短字符串。请注意,] 不必在此处进行转义。