PHP正则表达式使用src标记中的CID去除图像

时间:2015-08-12 05:36:55

标签: php regex

我目前正在使用PHP来解析电子邮件。我能够保存附加图像和嵌入图像;然而,嵌入的图像被赋予刺激性的“CID”源,导致图像链接断开。

我想完全解析这些问题,但保留与实际网址相关联的图片。

换句话说,<img src = "http://example.com/images/someimage.jpg">需要留下来。但是,<img src = "cid:ii_id8bx9qh0_14f205b0a5e7738a">需要去。

现在,我可以使用strops来查找开始和结束,这样就可以了......除了某些电子邮件客户端还嵌入了诸如宽度,高度和ID之类的东西 - 并且它们将它们放在偶然的顺序中。

所以,我需要一个正则表达式来查找<img的开头,其中包含src="cid,一直到图片代码的末尾。

奖励积分如果不区分大小写。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

为此任务使用正确的tool而不是正则表达式。

$doc = new DOMDocument;
$doc->loadHTML($html); // load the HTML data

$xp = new DOMXPath($doc);

foreach ($xp->query('//img[contains(@src, "cid")]') as $img) {
   $img->parentNode->removeChild($img);
}

echo $doc->saveHTML();

答案 1 :(得分:-2)

使用preg_replace

preg_replace('~<img\b[^>]*src\s*=\s*"cid[^"]*"[^>]*>~i', '', $str);

preg_replace('~<img\b[^>]*\bsrc\s*=\s*[\'"]cid[^>]*>~i', '', $str);

i修饰符有助于进行不区分大小写的匹配。

DEMO