preg_match_all错误的模式

时间:2013-10-16 09:33:36

标签: php preg-match-all

我试图在预先确定的模式中挑选出所有单词,但它不起作用:

$html = "<tooltip>Do</tooltip> you<tooltip>know</tooltip>";

我希望preg_match_all返回

数组([0] =&gt;数组([0] =&gt;执行)[1] =&gt;数组([0] =&gt;知道))

使用此模式:

preg_match_all("/<tooltip ?.*>(.*)<\/tooltip>/", $html, $matches);

相反,它正在回归:

数组([0] =&gt;数组([0] =&gt;你知道吗)[1] =&gt;数组([0] =&gt;知道))

我猜这是我的模式错了,但我不知道是什么?&gt;

有什么想法吗?

由于

4 个答案:

答案 0 :(得分:1)

这不完全存在,但是挑选数据的正则表达式工作正常。只是它构建数组的方式与你正在寻找的不完全匹配。但经过一些调整后,我相信你可以搞清楚

<?php
$html = "<tooltip>Do</tooltip> you<tooltip>know</tooltip>";
preg_match_all("~<tooltip>(.*?)<\/tooltip>~", $html, $matches);
print_r($matches);

foreach($matches[0] as $key => $value) {
    $arr[] = $value;
}

print_r($arr);
?>

$ arr然后返回Array ( [0] => Do [1] => know ),这更接近你正在寻找的东西。

答案 1 :(得分:0)

我不是正则表达式专家,我使用Expresso构建可行的东西,但我不会说它是你可以使用的最好或最强大的正则表达式。

这似乎有效

<tooltip[^>]*>(.*?)</tooltip>

这样:

preg_match_all("/<tooltip[^>]*>(.*?)<\/tooltip>/", $html, $matches);

答案 2 :(得分:0)

试试这个:

preg_match_all("/<tooltip>([^<]+)<\/tooltip>/is", $html, $out);

您将获得所需的输出,但在$ out [1]中不在$ out [0]中。

[1] => Array
    (
        [0] => Do
        [1] => know
    )

答案 3 :(得分:0)

检查这个SO post为什么我们不使用正则表达式来解析html。

如果你坚持使用正则表达式来提取html,那么使用提供的正则表达式@Lee

<tooltip[^>]*>(.*?)</tooltip>

但是(以及其他许多人)会失败:

<tooltip attr="some > pretend > stuff">Do</tooltip> you<tooltip>know</tooltip>

以上情况可能永远不会发生在你身上。编程中没有太多保证,但是如果有的话你就不会接受它。 DomDocument为您提供html保证。你的电话