测试字符串
$str = '<center><img src="/uploads/images/20100516000.jpg" height="120" width="120"><br />PHP正则提取或更改图片img标签中的任意属性</center>';
常用提取模式
| 目的 | 正则模式 | 结果示例 |
| 整个 img 标签 | /<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i | <img src="..." height="120" width="120"> |
| width 属性值 | /<img.+(width=\"?\d*\"?).+>/i | width="120" |
| height 属性值 | /<img.+(height=\"?\d*\"?).+>/i | height="120" |
| src 路径 | /<img.+src=\"?(.+\.(jpg|gif|bmp|bnp|png))\"?.+>/i | /uploads/images/20100516000.jpg |
替换示例
// 1. 将 src="/uploads/images/..." 替换为 src="/uploads/uc/images/..."
echo preg_replace('/(<img.+src=\"?.+)(images\/)(.+\.(jpg|gif|bmp|bnp|png)\"?.+>)/i', '${1}uc/images/${3}', $str);
// 2. 替换 src 并移除 width/height
echo preg_replace('/(<img).+(src=\"?.+)images\/(.+\.(jpg|gif|bmp|bnp|png)\"?).+>/i', '${1} ${2}uc/images/${3}>', $str);
最佳实践建议
- **优先使用 DOMDocument**:
$dom = new DOMDocument(); $dom->loadHTML($str); $imgs = $dom->getElementsByTagName('img'); 遍历获取/设置属性,健壮性远超正则。
- 正则仅适用于**结构固定、一次性**的简单提取/替换。
- HTML 可能包含单引号、双引号、无引号、属性顺序变化,正则极难全覆盖。
- 若必须用正则,添加
s 修饰符匹配换行,并充分测试边界情况。