我正在寻找正则表达式来查找第一个<h3>
标记的内容。我可以在那里使用什么?
答案 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("/<h3>(.*)<\/h3>/", $search_in_this_string, $put_matches_in_this_var);