我尝试使用preg_match_all
来获取给定 html 标记之间的所有内容,但它会产生一个空结果,而且我不擅长 php。
有没有办法在标签之间获取内容?像这样 -
<span class="st"> EVERYTHING IN HERE INCLUDING TAGS<B></B><EM></EM><DIV></DIV>&+++ TEXT </span>
我尝试使用preg_match_all
来获取给定 html 标记之间的所有内容,但它会产生一个空结果,而且我不擅长 php。
有没有办法在标签之间获取内容?像这样 -
<span class="st"> EVERYTHING IN HERE INCLUDING TAGS<B></B><EM></EM><DIV></DIV>&+++ TEXT </span>
preg_match
不太擅长 HTML 解析,尤其是在您的情况下,它有点复杂。
相反,您使用 HTML 解析器并获取您正在寻找的元素。以下是选择第一个 span 元素的简单示例。这也可以通过查找类属性来区分,例如,只是为了给你一些开始的指示:
$html = '<span class="st"> EVERYTHING IN HERE INCLUDING TAGS<B></B><EM></EM><DIV></DIV>&+++ TEXT </span>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$span = $doc->getElementsByTagName('span')->item(0);
echo $doc->saveHTML($span);
输出:
<span class="st"> EVERYTHING IN HERE INCLUDING TAGS<b></b><em></em><div></div>&+++ TEXT </span>
如果您仔细观察,您会发现即使是 HTML 错误也已被即时修复,&+++
其中的 HTML 不是有效的。
如果只需要内部 HTML,则需要遍历 span 元素的子元素:
foreach($span->childNodes as $child)
{
echo $doc->saveHTML($child);
}
哪个给你:
EVERYTHING IN HERE INCLUDING TAGS<b></b><em></em><div></div>&+++ TEXT
我希望这是有帮助的。
试试这个preg_match
$str = "<span class=\"st\"> EVERYTHING IN HERE INCLUDING TAGS<B></B><EM></EM><DIV></DIV>&+++ TEXT </span>";
preg_match("/<span class=\"st\">([.*?]+)<\/span>/i", $str, $matches);
print_r($matches);