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

PHP preg_match_all 正則表達式實戰:解析 HTML 擷取 DIV 屬性與內容

     編輯:PHP 綜合知識

目標

從 HTML 字串中擷取每個 <div> 的 id 屬性值與內容文字:

$html = '<div id="biuuu">jb51.net</div><div id="biuuu_2">jb51.net2</div><div id="biuuu_3">jb51.net3</div>';

預期結果:biuuu, biuuu_2, biuuu_3 與 jb51.net, jb51.net2, jb51.net3

正則表達式構建步驟

1. 確定單一 DIV 結構

<div id="(biuuu)">(jb51.net)</div>

2. 設計子表達式

  • 表達式 1(id 值):[a-zA-Z0-9_]+ — 英數字與底線
  • 表達式 2(內容):[^<>]+ — 非 <、> 字元(避免貪婪匹配跨越標籤)

3. 組合完整 Pattern

/<div\s+id="([a-zA-Z0-9_]+)">([^<>]+)<\/div>/
  • \s+:匹配一或多個空白
  • ":雙引號需跳脫
  • ():捕獲群組
  • <\/div>:結束標籤,斜線需跳脫

preg_match_all 實測

<?php
$html = '<div id="biuuu">jb51.net</div><div id="biuuu_2">jb51.net2</div><div id="biuuu_3">jb51.net3</div>';

preg_match_all('/<div\s+id="([a-zA-Z0-9_]+)">([^<>]+)<\/div>/', $html, $result);

var_dump($result);
?>

結果解析

array(3) {
  [0]=> array(3) {          // 完整匹配
    [0]=> "<div id="biuuu">jb51.net</div>"
    [1]=> "<div id="biuuu_2">jb51.net2</div>"
    [2]=> "<div id="biuuu_3">jb51.net3</div>"
  }
  [1]=> array(3) {          // 第 1 個捕獲群組
    [0]=> "biuuu"
    [1]=> "biuuu_2"
    [2]=> "biuuu_3"
  }
  [2]=> array(3) {          // 第 2 個捕獲群組
    [0]=> "jb51.net"
    [1]=> "jb51.net2"
    [2]=> "jb51.net3"
  }
}

關鍵技巧總結

  • 用 () 定義捕獲群組,$result[1]、$result[2] 對應各群組
  • 內容匹配用 [^<>]+ 排除標籤字元,避免跨標籤匹配
  • preg_match_all 會找出所有不重疊匹配,適合批次擷取
  • 調試時善用 var_dump($result) 觀察陣列結構

進階提醒

解析複雜 HTML 建議使用 DOMDocument 或 PHP Simple HTML DOM Parser,正則表達式難以處理巢狀結構、屬性順序不固定等情況。

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