如何将选定的标记与 HTML 内容分开


how to separate selected tags from html content

我有一个像 html

 <span class="address">
   <h1>Dr. Maria Steffens</h1>
   <h4>Institute of Medico</h4>
   <h4></h4>
   <h4></h4>
   <p>Sta. Ana, strt PH-501</p>
   <p>1062 Caracas</p>
   <p>France</p>
  <br>
   <p>Telefon: +58-457-2889567</p>
   <p><a href="mailto:plasticsurgery@yahoo.com">plasticsurgery@yahoo.com</a></p>
   <p><a href="http://">www.mysite.com</a></p>
</span>

现在我想像

<h1>Dr. Maria Steffens</h1>

或发生

<h4></h4> tag

我试过了

$html = new DOMDocument();
@$html->loadHtmlFile('http://www.sitetofetch.com');
$xpath = new DOMXPath( $html );
$nodelist = $xpath->query( "//*[@class='address']" );
foreach ($nodelist as $n){
  $newhtml = $html->saveHtml($n)."'n";
  $newhtml = htmlentities($newhtml);
$items = $html->getElementsByTagName('h1');
}

但它不能正常工作,

我该怎么做。

正如其他人提到的,请改用解析器。
以下代码片段将HTML加载到DOM中,并对其应用 xpath 查询。显然,这些需要稍微调整一下,但要打印出"玛丽亚·斯蒂芬斯博士",以下作品:

<?php
$data = <<<DATA
<span class="address">
   <h1>Dr. Maria Steffens</h1>
   <h4>Institute of Medico</h4>
   <h4></h4>
   <h4></h4>
   <p>Sta. Ana, strt PH-501</p>
   <p>1062 Caracas</p>
   <p>France</p>
  <br>
   <p>Telefon: +58-457-2889567</p>
   <p><a href="mailto:plasticsurgery@yahoo.com">plasticsurgery@yahoo.com</a></p>
   <p><a href="http://">www.mysite.com</a></p>
</span>
DATA;
$dom = new DOMDocument();
$dom->loadHTML($data);
$xpath = new DOMXPath($dom);
$headers = $xpath->query("//h1");
foreach ($headers as $header) {
    echo $header->nodeValue;
}
?>

查看有关 ideone.com 的演示


至于你最初的问题,为什么它不起作用,让我们把你的表达分成几个部分:
<h1    # match <h1 literally
's     # followed by one whitespace character (space, tab, newline)
[^>]*  # followed by anything not >, zero or more times
>      # followed by >
(.*)   # anything in that line afterwards
<'/h1> # followed by </h1>

问题是,<h1>之后没有空格,因此表达式将失败。