从网站php中提取信息无法正常工作

时间:2013-11-03 23:50:11

标签: php regex extract

        <?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中提取所有个人收视率信息,因为某种原因我无法找到一种方法来提取它,我一直在尝试各种不同的方式但我想这是我在这里缺乏正则表达式知识,这可能是一个小小的愚蠢错误,但我现在一直在寻找解决这个问题的过去几天。

1 个答案:

答案 0 :(得分:2)

我看到几个错误:

  1. 您认为是纯文本的表达式部分包含正则表达式特殊字符。您可以考虑转义它们或使用preg_quote()函数或使用~代替/来包装表达式。
  2. 如果<ul>节点被拆分为多行html代码,则需要添加s开关。
  3. 我会亲自使用(.*)与ungreedy开关(U在表达结尾处)
  4. 我没有时间检查这个,但是如果网站结构与您的表达式相同,那么这个应该有效: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。正则表达式的特殊字符是:. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -