PHP正则表达式替换图像SRC属性

时间:2012-03-27 04:48:11

标签: php html regex src preg-replace-callback

我正在尝试找到一个正则表达式,允许我替换图像中的SRC属性。这就是我所拥有的:

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

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

在大多数情况下,这很有效,除了当$ contents回显到屏幕时,src="属性之前的任何内容都被消除了。最后,SRC已正确更新,更新后的图片网址后的所有属性都会返回到屏幕。

我对使用DOM或XML解析库不感兴趣,因为这是一个很小的应用程序。

如何修复正则表达式以便只更新SRC的值?

感谢您的时间!

2 个答案:

答案 0 :(得分:2)

使用lazy star代替贪婪的人。

这可能是你的问题:

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

将其更改为:

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

这样,[^>]*匹配括号表达式的最小可能数,而不是最大可能数。

答案 1 :(得分: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);