2013-03-22 30 views
-1

這似乎是確定的工作:如何在php中替換preg_replace添加一個函數?

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()中參數的值?

+0

我只知道我可以做這樣的事情來調用一個使用preg_replace_callback的外部方法。數組(get_class($ this),'generateImage') – matt 2013-03-22 10:59:19

回答

1

你想要的可能是preg_replace_callback而不是preg_replace。在這裏您可以使用返回替換值的函數。

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()當然。

+0

是不是e修飾符不推薦? – matt 2013-03-22 10:33:58

+0

它不被棄用,但是:「不鼓勵,因爲它很容易引入安全漏洞」。 – Rijk 2013-03-22 10:35:50

+0

它似乎並不適用於e,它顯然無法找到模式(即使它與s有關) – matt 2013-03-22 10:39:29