PHP - 如何连续从多个p标签中获取文本

时间:2012-06-12 16:28:56

标签: php regex preg-replace

我有一个变量持有一些HTML。在html中,有几个p标签彼此相邻。我想从那些p标签中检索文本并将它们格式化为1段并将此新段落设置为新变量。这有意义吗?

<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>

变为:

<p>apple banana grape</p>

注意:html中的元素可能会有所不同。例如没有iframe。某处的图像,等等。

2 个答案:

答案 0 :(得分:2)

您可以使用Xpath执行此操作

$html = '<h2></h2>
<p>date</p>
<ul></ul>
<iframe></iframe>
<p>apple</p>
<p>banana</p>
<p>grape</p>
<ul></ul>';

$doc = new DOMDocument();
$doc->loadHTML($html);

$xpath = new DOMXpath($doc);

$elements = $xpath->query("//p");
foreach ($elements as $node){
echo $node->nodeValue. "<br/>";
}

答案 1 :(得分:1)

示例:

$html = '<h2></h2>
  <p>date</p>
  <ul></ul>
  <iframe></iframe>
  <p>apple</p>
  <p>banana</p>
  <p>grape</p>
  <ul></ul>';

if (preg_match_all('~<p>(?P<paragraphs>.*?)</p>~is', $html, $matches)) {
  print_r($matches['paragraphs']);
}

结果:

Array
(
    [0] => date
    [1] => apple
    [2] => banana
    [3] => grape
)

P.S。 “聪明”的downvoters你可以评论为什么你贬低? :))))))))))))))

P.P.S 投票的两位特别版:

$document = new DOMDocument();
$document->loadHTML($html);
$paragraphs = $document->getElementsByTagName('p');
$result     = array();

foreach ($paragraphs as $paragraph) {
  $result[] = $paragraph->nodeValue;  
}

print_r($result);