-1
        <?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 中提取所有个人评分信息,但是由于某种原因我找不到像这样提取它的方法,我一直在尝试很多不同的方法,但我想这是我在这里工作的正则表达式知识不足,这可能是一个愚蠢的小错误,但最近几天我一直在寻找解决这个问题。

4

1 回答 1

2

我看到几个错误:

  1. 您认为是纯文本的表达式部分包含正则表达式特殊字符。您可以考虑转义它们或使用preg_quote()函数或使用~而不是/包装表达式。
  2. 如果<ul>node 拆分为多行 html 代码,则需要添加sswitch。
  3. 我会亲自使用(.*)不贪婪的开关(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。正则表达式特殊字符是:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

于 2013-11-04T00:03:05.737 回答