在 PHP 開發中,經常需要從 HTML 字串中解析 <img> 標籤的屬性,例如 src、width、height 等。雖然現代專案建議使用 DOMDocument 解析 HTML,但正則表達式在簡單場景下依然快速有效。本文將示範如何用 preg_match 提取任意屬性,並演示如何替換圖片路徑。
$str = '<center><img src="/uploads/images/20100516000.jpg" height="120" width="120"><br />PHP正則提取或更改圖片img標記中的任意屬性</center>';
preg_match('/<\s*img\s+[^>]*?src\s*=\s*([\'\"])(.*?)\\1[^>]*?\/?\s*>/i', $str, $match);
echo $match[0]; // 輸出完整的 <img ...> 標籤
preg_match('/<img.+(width="?\d*"?).+>/i', $str, $match);
echo $match[1]; // 輸出 width="120"
preg_match('/<img.+(height="?\d*"?).+>/i', $str, $match);
echo $match[1]; // 輸出 height="120"
preg_match('/<img.+src="?(.+\.(jpg|gif|bmp|bnp|png))"?.+>/i', $str, $match);
echo $match[1]; // 輸出 /uploads/images/20100516000.jpg
// 將 src="/uploads/images/..." 替換為 src="/uploads/uc/images/..."
echo preg_replace(
'/(<img.+src="?.+)(images\/)(.+\.(jpg|gif|bmp|bnp|png)"?.+>)/i',
'${1}uc/images/${3}',
$str
);
echo preg_replace(
'/(<img).+(src="?.+)images\/(.+\.(jpg|gif|bmp|bnp|png)"?).+>/i',
'${1} ${2}uc/images/${3}>',
$str
);
DOMDocument + DOMXPath 更穩健。