2012-03-27 45 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 *= *[\"']?([^\"']*)/ 

这样,[^>]*数量尽可能少的括号表达式,而不是最大可能的一致。