如何使用正则表达式检索DIV的内容?

时间:2011-03-13 22:01:50

标签: php regex programming-languages html

  

可能重复:
  Xpath not behaving for me in parsing basic html

我知道如何从具有静态名称的div中获取内容(即在整个页面中始终相同)。但是,我的情况是“post_id_xxxxx”,类似这样:

<div id="post_id_12345">abc</div>

<div id="post_id_67890">abc</div>

<div id="post_id_31234">abc</div>

我想提取“abc”字符串,但对我来说似乎很难,因为每个div都有不同的ID。

感谢。

2 个答案:

答案 0 :(得分:1)

不要使用regexp解析HTML / XML。 HTML具有html特定解析器可以利用的结构。请参阅此经典链接:RegEx match open tags except XHTML self-contained tags

你应该尝试一些像domdocument

这样的PHP解析器

请勿使用

这是一个与您指定的示例匹配的正则表达式。它不适用于更复杂的结构(例如嵌套的div)。你还没有真正指定你知道的关于html结构的不变量,从这应该有效的例子。您可以扩展此正则表达式以匹配更复杂的内容,但真正的解析器将更加强大和简单。

<div id="post_id_[0-9]{5}">(.*)</div>

答案 1 :(得分:1)

这仍然适用于正则表达式,如果它只是关于你的例子中过于简单的情况:

preg_match('#<div\s[^>]*id="post_id_12345"[^>]*>(.*?)</div>#', $str, $m)

但是只要在文档或其他复杂结构中嵌套了div,就需要使用HTML解析器。为了给你一个真实的例子而不是通用链接,请使用phpQuery或QueryPath

print qp($html)->find("#post_id_12345")->text();