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("/<h3>(.*)<\/h3>/", $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]"