【问题标题】:preg_match , regexp , php , extract text from htmlpreg_match , regexp , php , 从 html 中提取文本
【发布时间】:2010-05-22 13:42:47
【问题描述】:

我正在尝试从http://www.auctionarms.com/search/displayitem.cfm?itemnum=9736364&oh=216543 中提取“Florida (FL)”。 我的代码是

//获取位置 $pattern = "/(状态):(.*)/"; preg_match_all($pattern, $htmlContent, $matches); print_r($matches); 知道为什么不工作吗?

【问题讨论】:

  • 这似乎是 SO 的一贯口号:尽可能避免使用正则表达式解析 html。它不是完成这项工作的工具。

标签: php regex preg-match


【解决方案1】:

当您在正则表达式中有(State) 时,它将匹配输入字符串中的术语State 作为一个组,它不会匹配输入中的文字括号 - 您需要像您一样转义它们与/s - /\(State\)<\/...

还有一个问题是周围有很多空格(包括新行 - 您需要包含 m 修饰符),以及您似乎没有包含在正则表达式中的标题周围的 <b/> 标记.即使您解决了这些问题,您也高度依赖您正在抓取的网站使用的确切标记。这是您在尝试使用正则表达式解析 HTML 时会遇到的一般问题。使用 HTML 解析器会更好(例如,创建一个新的 DOMDocument 并调用它的 loadhtml 方法)。

【讨论】:

  • 我建议使用 HTML 解析器,但在查看网页后我改变了主意……没有类、没有 ID、没有 css;很难找到 State 这个词。
【解决方案2】:

我认为原因是您要匹配的字符串在下一行。您需要启用多行模式:

$pattern = "/\(State\)<\/i>\:<\/td>(.*)<\/td>/m";

但请记住:尝试使用正则表达式解析 HTML 会使邪恶的孩子流下处女的血。见:

RegEx match open tags except XHTML self-contained tags

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多