本文將詳細(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]*?)
該正則表達(dá)式/
標(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解析器。