preg_match_all在未找到匹配项时将空数据返回到结果数组

时间:2013-07-22 16:24:23

标签: php regex preg-match preg-match-all

我试图在以下数据上使用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>

任何帮助表示赞赏的人:)

1 个答案:

答案 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解析器的原因。