php - 独特的正则表达式替换与捕获
问题描述
我有一个包含许多图像的文本(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;
}
解决方案
使用正则表达式修改 HTML/XML通常是一个非常糟糕的主意。几乎不可能做到正确,并且以后往往会产生令人不快的意外副作用。
您最好使用Tidy 扩展和DOMDocument之类的东西来解析结果并执行您需要做的属性替换。
推荐阅读
- ms-media-foundation - 如何在 mediafoundation source Reader 和 sink writer 中支持 mxf 文件格式
- python - 如何访问表中的某些数据?
- python - 使用 python 将 XML 转换为 Json 并触发 post API 请求
- php - 无法传递数组数据
- android - 如何使用大单行文本将 ButtonView 定位到 TextView 的末尾,而不是将其移出屏幕
- android - Android Activity 不会停止服务和位置更新
- corespotlight - 在 Spotlight 中重复显示 NSUserActivity
- postgresql - PostgreSQL UPDATE JOIN ...它是如何工作的?
- linux - ncat web server如何获取请求参数和客户端ip
- java - 具有来自连接实体的属性的 Micronaut 数据 DTO 投影