【问题标题】:PHP preg_match_all with CurlPHP preg_match_all 与 Curl
【发布时间】:2012-02-17 22:34:24
【问题描述】:

我有一个 PHP 脚本,它向 market.android.com/mylibrary 提交 curl 请求并检索页面,然后使用正则表达式对其进行解析。在下面的第一个链接中,您可以看到运行时它会输出与底部的每个正则表达式测试相对应的“出错了出错了”。现在,如果您注释第 74 行并取消注释 75,它将起作用。如果您想查看 curl 返回的内容,只需在底部添加 echo($result);

请务必在顶部填写您的 Google 凭据并在您的网络服务器中启用 curl --> Example file 1

现在,在第二个示例中,我仅从 curl 结果中提取了相关部分,并手动转义了所有撇号。我将相同的正则表达式字符串放在底部,它的工作方式完全符合预期。

Example file 2

是否有人能够看到导致问题的原因?我试过使用 preg_last_error() 但它只是返回0。谢谢!

【问题讨论】:

  • 你为什么不用像 DomDocument 这样的 dom 解析器
  • 我以前从未听说过这个。我仍然需要使用正则表达式来找到我需要的东西,对吗?
  • 没有。你永远不会用正则表达式解析 html/xml。你只会扯掉你的头发,试图弄清楚它为什么不起作用。
  • 不,它取代了正则表达式,使用正则表达式解析 html 是不好的做法,因为最终您的表达式将由于源站点的更改而失败
  • 嗯,很高兴知道,你们有什么关于使用这种方法的特别好的文章吗?我只看到了一种传递文件名或 url 的方法,没有像 curl 给我的那样传递一个包含整个页面的字符串的方法。

标签: php regex curl preg-match-all


【解决方案1】:

感谢 cmets 中提供的提示,我得到了这个工作。这是解决方案:

$doc = new DOMDocument();
@$doc->loadHTML($result);
$images = $doc->getElementsByTagName('img');

$apps = array();

foreach($images as $img) {
    $alt = $img->getAttribute('alt');
    if($alt != '') {
        $src = $img->getAttribute('src');
        if(strpos($src, 'data:image/gif;base64') !== false) {
            $src = $img->getAttribute('data-lazysrc');
        }
        $apps[$alt] = $src;
    }
}

return $apps;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2012-06-19
    • 2011-10-18
    相关资源
    最近更新 更多