【发布时间】:2016-09-10 05:14:20
【问题描述】:
在我的代码中,我有以下正则表达式:
preg_match_all('/<title>([^>]*)<\/title>/si', $contents, $match );
从网页中检索 <h>..</h> 标记。但有时它可能有 html 标签,例如 <strong>,<b> 等,因此它需要一些修改,因此我尝试了这个
preg_match_all('/<h[1-6]>(.*)<\/h[1-6]>/si', $contents, $match );
但是出了点问题,没有检索到 html <h> 标签中的内容。
你能帮我正确修改正则表达式吗?
【问题讨论】:
-
如果
hs 有任何属性,这将失败。.*也很贪心,如果页面上有多个,它会吃掉所有东西。解析器是您最好的方法。看看stackoverflow.com/questions/3577641/… -
正如在另一篇文章中所说,不要使用正则表达式来解析 HTML,除非您的 html 非常简单并且您不需要搜索嵌套标签。即使那样,也是个坏主意。有 DOM 解析器 (DOMDocument) 用于解析 HTML,并且非常易于使用。它们有几种与 JS 相同的方法,例如
getElementsByTagName,可用于查找每个<h>标签。
标签: php html web-scraping html-parsing