2012-03-27 80 views
1

我試圖找到一個正則表達式,可以讓我替換圖像中的SRC屬性。以下是我有:PHP正則表達式替換圖像SRC屬性

function getURL($matches) { 
    global $rootURL; 
    return $rootURL . "?type=image&URL=" . base64_encode($matches['1']); 
} 

$contents = preg_replace_callback("/<img[^>]*src *= *[\"']?([^\"']*)/i", getURL, $contents); 

在大多數情況下,這個效果很好,但任何事情之前,當$內容顯示到屏幕上消失了src="屬性。最後,SRC已正確更新,並且更新的圖像URL之後的所有屬性都會返回到屏幕。

我對使用DOM或XML解析庫不感興趣,因爲這是一個很小的應用程序。

如何修復正則表達式,以便只更新SRC的值?

謝謝你的時間!

回答

1

做另一個分組,並將其前置到返回值?

function getURL($matches) { 
    global $rootURL; 
    return $matches[1] . $rootURL . "?type=image&URL=" . base64_encode($matches['2']); 
} 

$contents = preg_replace_callback("/(<img[^>]*src *= *[\"']?)([^\"']*)/i", getURL, $contents); 
+0

它的作品就像一個親!謝謝安德烈! – 2012-03-27 05:01:05

2

使用lazy star而不是貪婪的。

這可能是你的問題:

/<img[^>]*src *= *[\"']?([^\"']*)/ 
     ^

將其更改爲:

/<img[^>]*?src *= *[\"']?([^\"']*)/ 

這樣,[^>]*數量儘可能少的括號表達式,而不是最大可能的一致。