我试图在以下数据上使用preg_match_all
$data = " .........data
<p class='need'>
...........data
</p>
<p class='need'>
...........data
</p>
<p class='need'></p>
<p class='need'>
...........data
</p>
<p class='need'></p>
";
preg_match_all("/.*?<p class=\"need\">(.*?)<\/p>/si",$data, $tmp);
以上返回数据存在的所有结果,但是我希望$ tmp中包含一个空数据,这样我得到所有5个结果,但是没有找到任何数据... < / p>
任何帮助表示赞赏的人:)
答案 0 :(得分:0)
如果用户正确使用正则表达式,你的正则表达式肯定会返回5个匹配。
问题在于这个正则表达式:
"/.*?<p class=\"need\">(.*?)<\/p>/si"
如果仔细观察,您会尝试将班级"need"
与双引号匹配,而在您的HTML代码中,您正在使用包含在单引号中的该类:'need'
这是你纠正的正则表达式,将返回5个匹配,包括2个空匹配。
preg_match_all("/<p class='need'>(.*?)<\/p>/si", $data, $tmp);
PS:这正是您应该避免使用正则表达式解析HTML并考虑使用DOM解析器的原因。