我正在尝试找到一个正则表达式,允许我替换图像中的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
的值?
感谢您的时间!
答案 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);