我试图在预先确定的模式中挑选出所有单词,但它不起作用:
$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;
有什么想法吗?
由于
答案 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保证。你的电话