我有一个像这样的html字符串(这不是完全的HTML):
<h2>Title A</h2>
<p>aaaaaa</p>
<p>bbbbbb</p>
<h2>Title B</h2>
<p>aaaaaa</p>
<p>bbbbbb</p>
<h2>Title C</h2>
<p>aaaaaa</p>
<p>bbbbbb</p>
我想得到一个只有标题的数组(来自h2标签):
array(Title A, title B, Title C);
我正在使用php。
我试过了
strip_tags(string,'<h2>')
但我获得了标题,然后是<p>
标记后的内容。
答案 0 :(得分:11)
您可以尝试使用DOMDocument
$html = '<h2>Title A</h2>
<p>aaaaaa</p>
<p>bbbbbb</p>
<h2>Title B</h2>
<p>aaaaaa</p>
<p>bbbbbb</p>
<h2>Title C</h2>
<p>aaaaaa</p>
<p>bbbbbb</p>';
$dom = new \DOMDocument();
$dom->loadHTML($html);
$items = $dom->getElementsByTagName('h2');
for($i = 0; $i < $items->length; $i ++) {
echo $items->item($i)->nodeValue . PHP_EOL;
}
输出
Title A
Title B
Title C
答案 1 :(得分:3)
PHP已经构建了很好的用于HTML解析的库,这里是一个带有xpath的解析器:
$h2 = array_map(
'strval', simplexml_import_dom(\DomDocument::loadHTML($html))->xpath('//h2')
);
输出:
array(3) {
[0]=>
string(7) "Title A"
[1]=>
string(7) "Title B"
[2]=>
string(7) "Title C"
}
另见DOMDocument的其他相关答案,如果你听到HTML和PHP只是想想DomDocument。
$doc = new DomDocument;
$doc->loadHTML($html);
$h2 = array_map(
'strval', simplexml_import_dom($doc)->xpath('//h2')
);
答案 2 :(得分:1)
您应该使用DomDocument之类的解析器来解析HTML。
答案 3 :(得分:1)
您可以使用SimpleXML
代替DOMDocumenthttp://codepad.viper-7.com/Esairr
$html = '
<html>
<h2>Title A</h2>
<p>aaaaaa</p>
<p>bbbbbb</p>
<h2>Title B</h2>
<p>aaaaaa</p>
<p>bbbbbb</p>
<h2>Title C</h2>
<p>aaaaaa</p>
<p>bbbbbb</p>
</html>';
$xml = new SimpleXMLElement($html);
echo "<pre>";
print_r($xml->h2);
echo "</pre>";
输出
SimpleXMLElement Object
(
[0] => Title A
[1] => Title B
[2] => Title C
)
答案 4 :(得分:0)
您可以使用preg_match_all
:
preg_match_all("/<h2>(.*?)</h2>/si", $sResource, $aTitles);
print_r($aTitles[1]);
不鼓励用这样的PHP解析HTML,因为特定的字符,换行符等可能与你的脚本有关。 DOM Parser将是一个很好的替代方案。