在 CMS 系統、內容抓取或編輯器過濾中,常需要從富文本內容中批量提取所有 <img> 的 src 屬性與 <a> 的 href 屬性。本文示範如何使用 PHP 正則表達式高效完成此任務。
<?php
// 範例內容
$body = '<img src="Image/2009112422220515.gif" alt="樓盤網loupan" border="0" />';
$link = 'fdas<a href="https://www.bkjia.com" target="_blank">網頁制作教程</a>';
// 提取圖片路徑(支援 gif/jpg/jpeg/png/bmp)
preg_match_all('/(src|SRC)=["|\'| ]{0,}(Image\/([^"\']+\.(gif|jpg|jpeg|png|bmp)))/isU', $body, $imgArray);
// 提取超連結地址
preg_match_all('/<a(.*?)href=["\'](.*?)["\']/i', $link, $linkArray);
// 輸出結果
echo "圖片路徑: " . $imgArray[2][0] . "<hr/>";
echo "連結地址: " . $linkArray[2][0];
?>
| 模式 | 說明 |
|---|---|
/isU | i不區分大小寫、s讓 . 匹配換行、U非貪婪模式 |
(src|SRC) | 匹配 src 屬性,兼容大小寫 |
["|\'| ]{0,} | 匹配等號後可能的引號或空格 |
Image\/([^"\']+\.(gif|jpg|jpeg|png|bmp)) | 捕獲 Image 目錄下的圖片檔名 |
<a(.*?)href=["\'](.*?)["\'] | 非貪婪匹配 a 標籤的 href 值 |
DOMDocument 解析 HTML,比正則更健壯,能應對屬性順序變化、巢狀標籤等複雜情況。正則表達式雖強大,但在處理不規範 HTML 時易出錯。掌握 preg_match_all 的捕獲群組用法,配合 DOMDocument 才是專業開發者的正確選擇。