2017-05-26 3 views
-1

Regexがこれを行うことができるかどうかはわかりません。 言ってやるが、私はHTMLテキストを次ていますRegexが特定の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を見つけたいです。私は、ID =「項目リスト-1」とUL内のすべてのhrefをしたい場合 セイは、出力は次のようになります。

item1.html 
item2.html 

内部ではありませんすべてのhrefが含まれるべきではありません。

正規表現はできますか?

+1

使用したXPathとDOMパーサ。 –

+0

はいXPathはオプションですが、Regexがこの種の問題を解決できるかどうかを知りたいだけですか? – Youxu

+0

Regexは錯覚を起こす可能性があります。いくつかのシナリオでは可能ですが、期待することができない場合が常にあります。正規表現はHTMLでのみ動作します。 –

答えて

0

正規表現は、それを行うことができますが、それは複雑になるといない、100%の信頼性、より良いオプションはPHP Simple HTML DOM ParserまたはPHP 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) 
関連する問題