我知道如何从具有静态名称的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。
感谢。
答案 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();