-1

这似乎工作正常:

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

function generateImage($url){
    return $url;
}

但是当在 generateImage 函数中我尝试对参数做一些我不能做的事情时,因为参数的值是 $2 而不是实际值。

所以这不起作用:

function generateImage($url){
    $array = explode('.', $url);
    return $array;
}

顺便说一下,在模式中用 e 替换 s 似乎不起作用,因为我认为它已被弃用。

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

4

2 回答 2

1

你想要的可能是preg_replace_callback而不是preg_replace. 在这里,您可以使用返回替换值的函数。

于 2013-03-22T10:30:40.947 回答
0

你现在编码的方式,$this->generateImage("$2")代码在你调用的那一刻被执行preg_replace。它不是作为回调传递,而是首先执行,输出作为回调传递。

如果要执行该函数,则必须将 PHP 代码作为字符串传递,并使用e修饰符(http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php了解更多信息)。

return preg_replace($pattern, '$this->generateImage("$2")', $string);

或者preg_replace_callback()当然使用。

于 2013-03-22T10:30:11.210 回答