3

我想解析以下通过正则表达式通过 curl 检索到的 html 标签内容。

<span class='ui-allscores'>IND - 203/9 (49.4 Ovs)</span>

所以输出将是"IND - 203/9 (49.4 Ovs)".

我已经编写了以下代码,但它不起作用。

$one="<span class='ui-allscores'>IND - 203/9 (49.4 Ovs)</span>";
$five="~(?<=<span class='ui-allscores'>)[.]*(?=</br></span>)~";
preg_match_all($five,$one,$ui);
print_r($ui);
4

3 回答 3

7

试试这个:

$string = "<span class='ui-allscores'>IND - 203/9 (49.4 Ovs)</span>";

动态跨度标签:

preg_match('/<span[^>]*>(.*?)<\/span>/si', $string, $matches);

具体跨度标签:

preg_match("/<span class='ui-allscores'>(.*?)<\/span>/si", $string, $matches);

// Output
array (size=2)
  0 => string '<span class='ui-allscores'>IND - 203/9 (49.4 Ovs)</span>' (length=56)
  1 => string 'IND - 203/9 (49.4 Ovs)' (length=22)
于 2013-07-24T06:07:43.827 回答
1

如果您只是想删除 HTML 标签,请使用 php 内置函数strip_tags删除 html 标签。

删除 html 标签的另一个答案去除所有 HTML 标签,除了允许

于 2013-07-24T06:09:31.440 回答
1

您的正则表达式的问题是[.]部分。这仅匹配文字.,因为点是在字符类中编写的。所以只需删除方括号。

 $five="~(?<=<span class='ui-allscores'>).*(?=</br></span>)~";

下一个问题. 您可以通过在后面*添加一个来更改此匹配行为。?

$five="~(?<=<span class='ui-allscores'>).*?(?=</br></span>)~";

但总体要点是:您很可能应该使用 html 解析器来完成这项工作!

请参阅 如何在 PHP 中解析和处理 HTML/XML?

于 2013-07-24T06:12:05.967 回答