首页 > 解决方案 > 独特的正则表达式替换与捕获

问题描述

我有一个包含许多图像的文本(html 代码),例如:

<img src="X" attributes />

我需要将src值替换为唯一标识,例如CID:#其中#是这个唯一值。我不知道 src 值是否会完全不同,也许其中一些可以相等。

Bellow 是带有正则表达式以匹配图像的代码。现在,如何进行替换?

PS:我需要将创建的唯一代码和被替换的字符串之间的关系存储在一个数组中。例如,我需要知道 345 id 是相对于 url “img/xxx.jpg”的。

preg_match_all('/<img src=[",\']([^>,^\',^"]*)[",\']([^>]*)/', $html, $matches);

$url_image = array();
$attr_image = array();
$cid = array();

foreach ($matches[1] as $i => $img){

    $url_image[$i] = $matches[2][$i];
    $attr_image[$i] = $matches[3][$i];

    //How to replace the src value with the value of $cid?
    $cid[$contador] = "CID:".date('YmdHms').'.'.time().$i;
}

标签: phpregexpreg-replace

解决方案


使用正则表达式修改 HTML/XML通常是一个非常糟糕的主意。几乎不可能做到正确,并且以后往往会产生令人不快的意外副作用。

您最好使用Tidy 扩展DOMDocument之类的东西来解析结果并执行您需要做的属性替换。


推荐阅读