1

我正在尝试找到一个允许我替换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="在大多数情况下,这很有效,除了当 $contents 回显到屏幕时,该属性之前的任何内容都会被消除。最后,SRC正确更新,并将更新后的图像 URL 后的所有属性返回到屏幕。

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

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

感谢您的时间!

4

2 回答 2

2

使用懒惰的明星而不是贪婪的明星。

这可能是你的问题:

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

将其更改为:

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

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

于 2012-03-27T04:59:30.367 回答
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);
于 2012-03-27T04:57:06.860 回答