替换图像的域和路径

时间:2014-01-08 00:29:45

标签: php regex

我已将图像服务器移动到其他位置。如何仅在<中替换域和路径? img>标签没有触及< a>标签

<img src="http://old-domain.com/bad/old/smiley.gif" height="42" width="42">

<img src="http://new-domain.com/good/new/smiley.gif" height="42" width="42">

我一直在努力解决这个问题

$pattern = '/(<img [^>]*>)/i';
$replacement = 'hello' . '\1world';
$content = preg_replace($pattern, $replacement, $content);

2 个答案:

答案 0 :(得分:1)

你可以尝试这样的东西来找到相关的部分:

'/<img [^>]*src=\"http://old-domain.com\/bad\/old(?:[^"]*)"/i'

这是在查找包含错误域名的img个标记。

preg_replace_callback一起使用,其中回调函数使用正确的路径执行旧路径的简单str_replace

或者,如果您想查找所有图片代码或域名更改,则只需:

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

并调整替换功能以查找域部分。

请注意,只有在您为该属性使用双引号时它才有效,但我确信您可以根据需要进行调整。

答案 1 :(得分:1)

试试这个方法:

$pattern = '/(<img.*?)(old-domain.com/bad/old)(.*?[^>]*>)/i';
$replacement = '\1new-domain/good/new\3';
$content = preg_replace($pattern, $replacement, $content);

正则表达式解释说:

(<img.*?)(old-domain.com/bad/old)(.*?[^>]*>)

  • 完整匹配:捕获IMG标记,但不匹配结束标记(</img>
  • 捕获组1: img标记的开头
  • 捕获第2组:旧域
  • 捕获第3组:结束>