如何找到第一个h3标签的内容?

时间:2010-10-04 14:08:08

标签: php regex html-parsing

我正在寻找正则表达式来查找第一个<h3>标记的内容。我可以在那里使用什么?

8 个答案:

答案 0 :(得分:4)

你应该使用php的DOM解析器而不是正则表达式。你正在寻找这样的东西(未经测试的代码警告):

$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadHTML($html_content);
libxml_use_internal_errors(false);

$domx = new DOMXPath($domd);
$items = $domx->query("//h3[position() = 1]");

echo $items->item(0)->textContent;

答案 1 :(得分:3)

嗯,一个简单的解决方案如下:

preg_match( '#<h3[^>]*>(.*?)</h3>#i', $text, $match );
echo $match[1];

对于更复杂的一切,您应该考虑使用HTML文档解析器。

答案 2 :(得分:3)

DOM方法:

<?php

$html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
</head>
<body>

<h1>Lorem ipsum<h1>
<h2>Dolor sit amet<h2>
<h3>Duis quis velit est<h3>
<p>Cras non tempor est.</p>
<p>Maecenas nec libero leo.</p>
<h3>Nulla eu ligula est</h3>
<p>Suspendisse potenti.</p>

</body>
</html>
';

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

$titles = $doc->getElementsByTagName('h3');
if( !is_null($titles->item(0)) ){
    echo $titles->item(0)->nodeValue;
}

?>

答案 3 :(得分:2)

Here解释为什么使用正则表达式解析HTML是邪恶的。无论如何,这是一种方法......

$doc = new DOMDocument();
$doc->loadHTML($text);
$headings = $doc->getElementsByTagName('h3');
$heading = $headings->item(0);
$heading_value = (isset($heading->nodeValue)) ? $heading->nodeValue : 'Header not found';

答案 4 :(得分:1)

首先:正则表达式不是解析HTML代码的合适工具。但是在这种情况下,它们应该足够好,因为H3标签不能嵌套。

preg_match_all('/<h3[^>]*>(.*?)<\/h3>/si', $source, $matches);

$matches变量应包含H3标记的内容。

答案 5 :(得分:1)

使用类似

的xpath表达式
"/html/body/h3[0]"

这将选择整个第一个h3节点。

请注意,这不适用于格式错误的HTML。

答案 6 :(得分:0)

PHP能够本地解析HTML DOM - 您几乎肯定希望使用它而不是正则表达式。

有关详情,请参阅此页:http://php.net/manual/en/book.dom.php

并在右侧查看相关问题,以便人们提出非常相似的问题。

答案 7 :(得分:-1)

preg_match("/&lt;h3&gt;(.*)&lt;\/h3&gt;/", $search_in_this_string, $put_matches_in_this_var);