如何用正则表达式解析html标签?

时间:2013-07-24 06:01:55

标签: php regex curl

我想通过正则表达式解析通过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);

3 个答案:

答案 0 :(得分:5)

试试这个:

$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)

答案 1 :(得分:1)

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

关于删除html标记Strip all HTML tags, except allowed

的另一个答案

答案 2 :(得分:1)

正则表达式的问题是[.]部分。这只匹配文字.,因为点写在character class内。所以只需删除方括号。

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

接下来的问题是*的{​​{3}}。您可以通过放置?来更改此匹配行为。

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

但总的问题是:你最有可能使用html解析器来完成这项工作!

参见 greediness