<?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中提取所有个人评级信息,由于某种原因我找不到像这样提取它的方法,我一直在尝试很多不同的方法,但我想这是我缺乏正则表达式知识在这里工作,这可能是一个小的愚蠢错误,但在过去的几天里我一直在寻找解决这个问题。
我看到一些错误:
- 您认为是纯文本的表达式部分包含正则表达式特殊字符。您可以考虑转义它们或使用
preg_quote()
函数或使用~
而不是/
来包装表达式。 - 如果
<ul>
节点拆分为多行 html 代码,则需要添加s
开关。 - 我个人会使用带有不贪婪开关的
(.*)
(U
在表达式末尾)
我没有时间检查这个,但如果网站结构与您的表达式相同,这个应该可以工作:preg_match('~<ul class="personal_ratings">(.*)</ul>~Us', ...
无论如何,对于解析 HTML,使用一些 DOM 解析器要容易得多,比如 PHP Simple HTML DOM 解析器。它就像:
$html = file_get_html('http://www.lolking.net/summoner/euw/20849404');
$ratings = $html->find('ul.personal_ratings',0)->innertext;
正则表达式特殊字符是:. ' + * ? [ ^ ] $ ( ) { } = ! < > | : -