我想通过正则表达式解析通过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);
答案 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解析器来完成这项工作!