<?php
$url = "http://www.lolking.net/summoner/euw/20849404";
$str = file_get_contents($url);
if (preg_match('/<ul class="personal_ratings"> ([^<]*)<\/ul>/', $str, $matches) > 0) {
echo $matches[1]; //This is text one
}
?>
大家好,我正在尝试从我提供的$ url中提取所有个人收视率信息,因为某种原因我无法找到一种方法来提取它,我一直在尝试各种不同的方式但我想这是我在这里缺乏正则表达式知识,这可能是一个小小的愚蠢错误,但我现在一直在寻找解决这个问题的过去几天。
答案 0 :(得分:2)
我看到几个错误:
preg_quote()
函数或使用~
代替/
来包装表达式。<ul>
节点被拆分为多行html代码,则需要添加s
开关。(.*)
与ungreedy开关(U
在表达结尾处)我没有时间检查这个,但是如果网站结构与您的表达式相同,那么这个应该有效:preg_match('~<ul class="personal_ratings">(.*)</ul>~Us', ...
无论如何,对于解析HTML,使用一些DOM解析器要容易得多,比如PHP Simple HTML DOM Parser。它很简单:
$html = file_get_html('http://www.lolking.net/summoner/euw/20849404');
$ratings = $html->find('ul.personal_ratings',0)->innertext;
PS。正则表达式的特殊字符是:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -