我想在preg_replace中使用类方法作为第二个变量,比如
$x = preg_replace('/\[\[\[(.+)\]\]\]/',
(new ButtonGroupWidget(['idsForLoad' => ['\0']]))->run(),
$code);
创意是生成按钮而不是[[[按钮ID]]]。是的,这有点奇怪)是的,我知道什么是聪明的)
答案 0 :(得分:1)
您可以使用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);
我还建议在正则表达式中使用延迟点匹配模式来强制正则表达式匹配[[[
和]]]
之间的最短字符串。请注意,]
不必在此进行转义。