如何使用正则表达式获取 `<body>` 标签内的全部内容?

Posted

技术标签:

【中文标题】如何使用正则表达式获取 `<body>` 标签内的全部内容?【英文标题】:How can I grab the entire content inside `<body>` tag with regex? 【发布时间】:2011-10-17 01:23:43 【问题描述】:

如何使用正则表达式获取&lt;body&gt; 标签内的全部内容?

例如,

<html><body><p><a href="#">xx</a></p>

<p><a href="#">xx</a></p></body></html> 

我只想退货,

<p><a href="#">xx</a></p>

<p><a href="#">xx</a></p>

或者还有其他更好的想法吗?也许是 DOM 但我必须使用 saveHTML(); 然后它会返回 doctypebody 标签...

HTML Purifier 使用起来很痛苦,所以我决定不使用它。我认为正则表达式可能是我灾难的下一个最佳选择。

【问题讨论】:

这样的正则表达式对你不起作用&lt;body&gt;(.*)&lt;/body&gt;? 看看这个帖子***.com/questions/3577641/… @sahid - 不,怎么样,&lt;body class="large-text"&gt; ... &lt;/body&gt; 不要使用正则表达式。 htmlparsing.com/php.html 为您提供了如何使用正确的 HTML 解析器的示例。其实,如果你使用的是simple_html_dom,那么简单到file_get_html('http://www.google.com/')-&gt;plaintext; 【参考方案1】:
preg_match("/<body[^>]*>(.*?)<\/body>/is", $html, $matches);

$matches[1] 将是 body 标签的内容

【讨论】:

查看***.com/questions/701166/… 上的有效(!) HTML 示例,看看你是如何使用正则表达式失败的。【参考方案2】:
preg_match("~<body.*?>(.*?)<\/body>~is", $html, $match);
print_r($match);

【讨论】:

以上是关于如何使用正则表达式获取 `<body>` 标签内的全部内容?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 和 XPath 获取匹配正则表达式的 href

使用正则表达式替换 Pre 标记内的 Html

如何使用正则表达式获取价值? [复制]

如何使用正则表达式删除大于/小于符号 < > 内的字符串? [关闭]

ActionScript 3 中的正则表达式:如何排除复杂前缀?

如何使用javascript中的正则表达式在html标记中获取内容,包括标记?