0

我试图在以下数据上使用 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 个结果,而不是得到 3 个结果,但在没有找到任何数据时没有数据......

任何帮助表示赞赏伙计们:)

4

1 回答 1

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

于 2013-07-22T19:07:50.893 回答