如何在php中的preg_replace替换中添加函数?

如何在php中的preg_replace替换中添加函数?,php,function,preg-replace,Php,Function,Preg Replace,这似乎是可行的: function findImageTags($string) { $pattern = '/<div(.*?)sourcefile="([^"]+)"(.*?)>(.*?)<\/div>/s'; return preg_replace($pattern, $this->generateImage("$2"), $string); } function generateImage($url){ return

这似乎是可行的:

function findImageTags($string) {       
    $pattern = '/<div(.*?)sourcefile="([^"]+)"(.*?)>(.*?)<\/div>/s';
    return preg_replace($pattern, $this->generateImage("$2"), $string);
}

function generateImage($url){
    return $url;
}
顺便说一句,在模式中用e替换s似乎不起作用,因为我认为它已经过时了


那么我如何操作generateImage()中参数的值呢?

按照您现在的编码方式,
$this->generateImage($2”)
代码在调用
preg\u replace
时执行。它不是作为回调传递的,而是首先执行,输出作为回调传递

如果要执行该函数,必须将PHP代码作为字符串传递,并使用
e
修饰符(有关详细信息)


当然也可以使用。

您想要的可能是代替
preg\u replace
。在这里,您可以使用一个返回替换值的函数。

e修饰符不是不推荐使用吗?它不是不推荐使用,而是:“不推荐使用,因为它很容易引入安全漏洞”。它似乎不适用于e,它显然找不到模式(即使它适用于s)我刚刚发现我可以这样做,使用preg\u replace\u回调调用外部方法。数组(get_类($this),'generateImage')
function generateImage($url){
    $array = explode('.', $url);
    return $array;
}
return preg_replace($pattern, '$this->generateImage("$2")', $string);