PHP:获取特定标记内容的数组

时间:2012-09-28 09:20:49

标签: php html

我有一个像这样的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>标记后的内容。

5 个答案:

答案 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

代替DOMDocument

http://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将是一个很好的替代方案。