首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 正則提取留言內容:雙層過濾解析嵌套 HTML 結構

     編輯:PHP 綜合知識

前言

從包含嵌套結構的 HTML 字串中精準提取目標留言內容,是爬蟲、資料清洗、舊系統遷移常見需求。本文示範**雙層正則過濾**策略:第一層定位外層容器,第二層剝離內層嵌套結構,配合 `preg_match` 實現精準提取。

目標 HTML 結構分析

目標留言內容:測試文字1
樓主留言:
引用內容:測試文字2..

特徵:

  • 外層容器:`id="read_數字"` + 固定 `style` 屬性
  • 目標內容:外層容器直接文字節點 (「測試文字1」)
  • 干擾結構:內層 `
    ` 包含引用區塊

雙層正則解析代碼

測試文字1
樓主留言:
測試文字2..
'; /* * 第一層:匹配外層容器,捕獲其完整內部 HTML * 模式解析: * id="read_\d{8}" - 固定前綴 + 8位數字 * style="font-size:14px;line-height:150%;padding:10px;" - 固定樣式 (作為特徵) * > - 結束標籤 * (.*?) - 非貪婪捕獲內部內容 (第1捕獲組) *
- 結束標籤 * $ - 字串結尾 */ $pattern1 = '/id="read_\d{8}"\s+style="font-size:14px;line-height:150%;padding:10px;">(.*?)<\/div>$/s'; if (preg_match($pattern1, $str, $matches)) { echo "第一層匹配成功\n"; $inner_html = $matches[1]; // 獲得: "測試文字1
...
" /* * 第二層:剝離內層嵌套 div * 以 "

正則關鍵點解析

元素說明
/.../s 修飾符 s (PCRE_DOTALL):讓 `.` 匹配換行符,跨行匹配
(.*?) 非貪婪匹配:盡可能少匹配,配合後續 `<\/div>$` 精準定位
\s+ 匹配一或多個空白字符 (含換行、Tab),容忍格式差異
explode('
目標留言內容:測試文字1
樓主留言:
引用內容:測試文字2..
HTML; $dom = new DOMDocument(); libxml_use_internal_errors(true); // 抑制 HTML5 解析警告 $dom->loadHTML('' . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); libxml_clear_errors(); // 1. 找到目標容器 $xpath = new DOMXPath($dom); $container = $xpath->query('//div[@id="read_111111" and contains(@style, "font-size:14px")]')->item(0); if ($container) { // 2. 獲取第一個文字節點 (直接子節點中 type=XML_TEXT_NODE) foreach ($container->childNodes as $node) { if ($node->nodeType === XML_TEXT_NODE) { $text = trim($node->textContent); if ($text !== '') { echo "DOM 提取結果: [$text]\n"; break; } } } } /* 優點: - 結構化查詢,不依賴字串格式 - 自動處理實體編碼、巢狀標籤、屬性順序變化 - XPath 支援複雜條件 */

線上工具推薦

在線 HTML/JS/CSS 代碼過濾工具:
https://tools.jb51.net/code/htmlfilter

延伸閱讀

更多 PHP 相關內容可參考本站專題:《PHP 文件操作總結》、《PHP 運算與運算符用法總結》、《PHP 網絡編程技巧總結》、《PHP 基本語法入門教程》、《PHP 操作 Office 文檔技巧總結》、《PHP 日期與時間用法總結》、《PHP 面向對象程序設計入門教程》、《PHP 字符串用法總結》、《PHP+MySQL 數據庫操作入門教程》及《PHP 常見數據庫操作技巧匯總》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved