Php 如何在preg_替换中调用函数?

Php 如何在preg_替换中调用函数?,php,preg-replace,Php,Preg Replace,如何调用preg\u replace()中的函数 $template='[BILD=“123”][BILD=“246”]; $pat='/\[BILD=“(.*?”\]\[BILD=“(.*?”\]/'; $ret=getImageArea($id,$config,$1',$2'); 返回preg_replace($pat,$rep,$template); 它无法打开函数,无法发送123或246。 它只发送1美元和2美元。正如我(和许多其他人)在评论中所说,在这种情况下,您必须使用。一种可能的

如何调用
preg\u replace()
中的函数

$template='[BILD=“123”][BILD=“246”];
$pat='/\[BILD=“(.*?”\]\[BILD=“(.*?”\]/';
$ret=getImageArea($id,$config,$1',$2');
返回preg_replace($pat,$rep,$template);
它无法打开函数,无法发送123或246。 它只发送1美元和2美元。

正如我(和许多其他人)在评论中所说,在这种情况下,您必须使用。一种可能的办法:

$template = '<div> [BILD="123"][BILD="246"] </div>';
$pat = '/\[BILD="(.*?)"\]\[BILD="(.*?)"\]/';

return preg_replace_callback($pat, function($matches) use($id, $config) {
  return getImageArea($id, $config, $matches[1], $matches[2]);
}, $template);
$template='[BILD=“123”][BILD=“246”];
$pat='/\[BILD=“(.*?”\]\[BILD=“(.*?”\]/';
返回preg_replace_回调($pat,function($matches)use($id,$config){
返回getImageArea($id,$config,$matches[1],$matches[2]);
}美元模板);

。正如你所看到的,这很直截了当;唯一的问题是使
$id
$config
变量在回调中可用(这是通过
use
op完成的)。

当然它会发送
$1
$2
,这就是您编写的。查看
preg\u replace\u callback
。您在调用
preg\u replace
之前调用了
getImageArea
。即使变量达到了您的预期效果(我猜您已经习惯Perl),它将如何按照这种顺序工作?您到底在哪里告诉它调用函数?调用函数的唯一方法是使用不推荐的“e”标志,我看不到任何地方;上面写着123246。我做错了什么?您没有使用
e
标志:它已被弃用。你必须使用preg\u replace\u callback(),但是你需要阅读文档,你不能只是猜测参数应该是什么样子。太棒了!!!谢谢你的帮助。在网上找不到类似的东西。你是我的英雄哈哈:)@zerophreak-你好像在逃避官方手册。谷歌搜索随机教程永远不会有这么好的效果。
$template = '<div> [BILD="123"][BILD="246"] </div>';
$pat = '/\[BILD="(.*?)"\]\[BILD="(.*?)"\]/';

return preg_replace_callback($pat, function($matches) use($id, $config) {
  return getImageArea($id, $config, $matches[1], $matches[2]);
}, $template);