正则表达式找到特定XPath下的所有href

时间:2017-05-26 10:40:52

标签: regex

不确定Regex是否可以执行此操作。 说,我有以下Html文本:

<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 中的所有href,id =&#34; item-list-1&#34;,则输出应为:

item1.html
item2.html

不应包括所有不在里面的href。

Regex能做到吗?

1 个答案:

答案 0 :(得分: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 )