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

Php 如何找到第一个h3标签的内容?,php,regex,html-parsing,Php,Regex,Html Parsing,我正在寻找一个正则表达式来查找第一个标记的内容。我可以在那里使用什么?好吧,一个简单的解决方案如下: preg_match( '#<h3[^>]*>(.*?)</h3>#i', $text, $match ); echo $match[1]; preg#u match('#]*>(.*)#i',$text,$match); echo$match[1]; < >对于更复杂的事情,你应该考虑使用HTML文档解析器。 首先:正则表达式不是解析HTML代码的合适工具。但

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

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

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

< >对于更复杂的事情,你应该考虑使用HTML文档解析器。

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

preg_match("/&lt;h3&gt;(.*)&lt;\/h3&gt;/", $search_in_this_string, $put_matches_in_this_var);
preg_match_all('/<h3[^>]*>(.*?)<\/h3>/si', $source, $matches);
preg_match_all('/]*>(.*)/si',$source,$matches);

$matches
变量应该包含来自
H3
tagas的内容。

PHP能够本地解析HTML DOM-您几乎肯定希望使用它而不是regex

有关详细信息,请参见本页:

如果有人问类似的问题,请检查右侧下方的相关问题。

这是为什么用正则表达式解析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';

您应该使用php的DOM解析器而不是正则表达式。您正在寻找类似的内容(未测试的代码警告):

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;
}

?>

使用xpath表达式,如

"/html/body/h3[0]"
这将选择整个第一个h3节点


请注意,这对格式错误的html不起作用。

使用正则表达式进行这种html解析通常是个坏主意。请参阅:使用适当的HTML解析器。如果您的HTML是xhtml,您也可以使用xpath。PHP具有本地解析HTML DOM的能力-您几乎肯定想使用它而不是regex。我不知道这为什么会被否决-这是一个对新手来说合法的问题。我同意避免使用regex的观点,但我认为所有的否决票都有点苛刻——这不应该是一个因为你不知道怎么做而提出问题的网站吗?但是它们可以被注释掉,或者包含代码
Wibble-Wobble
,或者类似的内容。这里的表达是不正确的(通常使用regex是个坏主意)当然比我的尝试更优雅:)使用DOM的loadHTML(),这可以很好地处理现实世界(读坏的)HTML。
"/html/body/h3[0]"