Php 如何从html字符串中检索html元素开始标记?

Php 如何从html字符串中检索html元素开始标记?,php,html,regex,Php,Html,Regex,我正在尝试从html字符串中检索开始标记。我想包括中的所有内容 现在,我正试图这样做,但它似乎导致了编码问题,因为当我打印生成的$html utf-8字符时显示不正确: $dom = new DOMDocument(); $dom->loadHTML($html); //Evaluate Anchor tag in HTML $xpath = new DOMXPath($dom); $elements =

我正在尝试从html字符串中检索开始标记。我想包括
中的所有内容

现在,我正试图这样做,但它似乎导致了编码问题,因为当我打印生成的$html utf-8字符时显示不正确:

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

        //Evaluate Anchor tag in HTML
        $xpath = new DOMXPath($dom);


        $elements = $xpath->evaluate("/html/body//h1");

        for ($i = 0; $i < $elements->length; $i++) {
            print_r($elements->item($i));
        }

        // save html
        $html=$dom->saveHTML();
$dom=newdomdocument();
$dom->loadHTML($html);
//在HTML中计算锚定标记
$xpath=newdomxpath($dom);
$elements=$xpath->evaluate(“/html/body//h1”);
对于($i=0;$i<$elements->length;$i++){
打印($elements->item($i));
}
//保存html
$html=$dom->saveHTML();

我怎样才能确保它包含了所有的东西,直到
结束?

不是专家,但我做到了:

<h1( [^>]*(["'].*["'])\1*)?>
]*([“].[“]])\1*)?>
以下是我的测试:

更新1:

<h1\s*>|(.*=['"]*[^'"]*['"]*)>
<h1(.+=((['"]+[^'"]*['"]+)|[0-9]+))*\s*>
|(.*=['”]*[^']*['”]*['”]*)>
更新2:

<h1\s*>|(.*=['"]*[^'"]*['"]*)>
<h1(.+=((['"]+[^'"]*['"]+)|[0-9]+))*\s*>


我对应该支持h1标记的内容进行了建模。

不要为此使用正则表达式。嗨,昆汀,正如你建议的那样,我使用了DOM。我将稍后上载实现。我刚刚编辑了问题以显示我在做什么,但是我在编码方面遇到了问题,我不确定evaluate方法是如何工作的,因此可能会导致问题。@DJDavid98不会的“不能很好地处理
之类的事情。看看如果使用regex解析HTML会发生什么:@Oriol任何
不属于HTML标记的代码都应该转义为
。如果有人在使用regex的同时使用这样的有问题的代码,那是他们的错。它与
不匹配。”也不是
@Oriol,它现在已被部分更正,但仍然不匹配
或类似内容。更新1匹配
,但直到结束。@Oriol您有一组测试,对吗?;)请检查更新2。