【问题标题】:retrieving website html, but the code runs twice检索网站 html,但代码运行两次
【发布时间】:2014-08-17 04:33:23
【问题描述】:

我有这段代码,每当它运行时,它都会执行两次。这是一个问题,因为我需要为用户显示此信息。

我对数组不太熟悉,因此我希望您能在这方面拥有专业知识。

我的代码如下:

$wwwLink = "http://agynix.com/";
$IMEIapproved = false;
$data = file_get_contents($wwwLink);
//In the pattern the "class" is the div class, and the "div-res" is the value of the class
$pattern = '%<div\b[^>]*?\bclass\s*+=\s*+([\'"]?+)\bdiv-res\b(?(1)\1)[^>]*+>((?:[^<]++|<(?!/?div\b|!--)|<!--.*?-->|<div\b[^>]*+>(?2)</div\s*>)*+)</div\s*>%isx';
$matchcount = preg_match_all($pattern, $data, $matches);
if ($matchcount > 0) {
    print_r($matches);
}
else {
    echo "Holy shit! Back to the drawing board";
}

我的问题是;如何使此代码仅检索一次信息?是echo/print_r,是数组信息,是模式,还是我的无能?

【问题讨论】:

  • 如果代码确实运行了两次,这是在外部完成的,您必须提供调用代码。如果您将$matchcount 称为&gt;1,这取决于网站为您提供的数据以及您使用的正则表达式。在这种情况下,什么都不会运行两次。
  • agynix.com 上没有 div-res 类的元素。事实上-res 在源代码中没有出现。
  • 我知道没有...抱歉,我更改了链接但忘记更改类值。
  • @urzeit 如果我将 >0 更改为 >1,它将显示错误消息。如果有人可以请提供一些示例代码?将不胜感激。 :-)

标签: php file-get-contents preg-match-all


【解决方案1】:

我不确定它是否有帮助,但是...你知道preg_match_all 放入匹配整个表达式的$matches[0] 字符串和$mathches[1] - 匹配第一个带括号的子表达式的字符串吗?。

【讨论】:

  • 等等……你给了我一个好主意。我会尝试一些东西,然后回复你们。 :-)
  • 按照您的指示,我将变量更改为 $matches[0].... 终于成功了!我必须阅读数组! :-)))
  • 另一个您可能可以帮助解决的问题:如果我想对信息进行排序,例如排除按钮和其他东西....我该怎么做?我会改变 $pattern 的值,还是做一些其他的 php 代码?
  • 有很多方法可以做到这一点。您可以修改 $pattern 值,还可以检查 $matches[0] 数组的每个元素中是否存在字符串“按钮”,如果存在,则删除该元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
相关资源
最近更新 更多