2017-05-26 99 views
-1

不知道Regex是否可以做到這一點。 說,我有以下HTML文本:正則表達式查找特定XPath下的所有href

<ul id="item-list-1"> 
    <li data-title="title1"> 
     <a href="item1.html">hello 1</a> 
    </li> 
    <li data-title="title2"> 
     <a href="item2.html">hello 2</a> 
    </li> 
</ul> 

我希望有一個正則表達式查找裏面只有與特定ID UL元素的所有HREF。 說,如果我想裏面UL與ID的所有HREF =「項目列表-1」,輸出應該是:

item1.html 
item2.html 

所有的href哪些不是裏面應該不包括在內。

Can Regex能做到嗎?

+1

使用XPath和DOM解析器。 –

+0

是XPath是一個選項,只是想知道Regex是否有能力解決這種問題? – Youxu

+0

正則表達式可以創造一個幻想,這是可能的。在某些情況下也是可能的,但是當它不能達到你期望的水平時總是會出現邊緣情況。帶HTML的正則表達式只適用於假設。 –

回答

0

正則表達式可以做到這一點,但它會是複雜的,而不是100%可靠的,更好的選擇是PHP Simple HTML DOM ParserPHP DOMDocument,例如:

$doc = new DOMDocument(); 
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); // or DOMDocument::loadHTMLFile 
$xpath = new DOMXpath($doc); 

// A DOMNodeList implements the Traversable interface 
$elements = array_map(function($DOMAttr) { 
    return $DOMAttr->value; 
}, iterator_to_array($xpath->query("/ul[@id='item-list-1']//a/@href"))); 

// result: Array ([0] => item1.html [1] => item2.html) 
相關問題