如何用PHP正則表達(dá)式高效提取HTML中的特定內(nèi)容?

php正則表達(dá)式提取html內(nèi)容詳解

本文將詳細(xì)講解如何使用php正則表達(dá)式提取html片段中的特定內(nèi)容。我們將解決兩個(gè)具體問題:如何提取包含特定class屬性的div標(biāo)簽內(nèi)的所有內(nèi)容,以及如何提取該div標(biāo)簽內(nèi)所有a標(biāo)簽href屬性值。

問題一:提取class屬性為”box list channel max-border list-text-my”的div標(biāo)簽內(nèi)容

給定如下html代碼片段:

<div class="box list channel max-border list-text-my"> <ul>     <li><a href="/arthtml/40958.html" title="">[2022-12-13]新聞1</a></li>     <li><a href="/arthtml/40951.html" title="">[2022-12-13]新聞2</a></li>     <li><a href="/arthtml/40926.html" title="">[2022-12-13]新聞3</a></li> </ul> </div>

我們需要提取包含

    標(biāo)簽及其內(nèi)容的整個(gè)div塊。 可以使用以下php正則表達(dá)式實(shí)現(xiàn):

    立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

    $html = '<div class="box list channel max-border list-text-my"> <ul>     <li><a href="/arthtml/40958.html" title="">[2022-12-13]新聞1</a></li>     <li><a href="/arthtml/40951.html" title="">[2022-12-13]新聞2</a></li>     <li><a href="/arthtml/40926.html" title="">[2022-12-13]新聞3</a></li> </ul> </div>';  preg_match('/([ss]*?)
    /', $html, $matches); echo $matches[1]; // 輸出整個(gè)div的內(nèi)容

該正則表達(dá)式/

([ss]*?)/ 匹配

標(biāo)簽,.*?匹配任意字符(非貪婪模式),([ss]*?)捕獲

標(biāo)簽內(nèi)的所有內(nèi)容(包括換行符)。

問題二:提取上述div標(biāo)簽內(nèi)所有a標(biāo)簽的href屬性值

繼續(xù)使用上面的html片段,我們需要提取每個(gè)標(biāo)簽的href屬性值。可以使用以下php正則表達(dá)式:

preg_match_all('/<as.*?href="(.*?)"/', $matches[1], $hrefs);  print_r($hrefs[1]); // 輸出所有href屬性值的數(shù)組

該正則表達(dá)式/標(biāo)簽,并捕獲href屬性值中的內(nèi)容。preg_match_all函數(shù)可以匹配所有符合條件的字符串。

通過以上兩個(gè)正則表達(dá)式,我們可以有效地從html代碼中提取所需的信息。 需要注意的是,使用正則表達(dá)式解析html并非最佳實(shí)踐,對(duì)于復(fù)雜的html結(jié)構(gòu),建議使用dom解析器。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊10 分享