【问题标题】:PHP matching allPHP匹配所有
【发布时间】:2013-04-30 17:04:55
【问题描述】:

我正在使用一个名为 Movie Poster 的 wordpress 插件,它从 imdb 获取电影信息并将其显示在帖子中。我如何在第一个逗号之前抓住第一个 Production Co?我对这段代码的工作方式感到困惑。这是获取所有生产公司的代码:

$arr['productions'] = array();
foreach($this->match('/<a.*?>(.*?)<\/a>/ms', 
           $this->match('/Production Co.?:(.*?)(<\/div>|See more)/ms', $html, 1)
        , 1) as $m)
    array_push($arr['productions'], $m);`

感谢您的宝贵时间

【问题讨论】:

  • 您不应该使用正则表达式解析 html。这就是为什么我们有php.net/dom
  • 感谢您的快速回复。我能做些什么来解决这个问题?
  • @user2336811:联系该插件的开发人员,告诉他您的问题并协商解决方案。
  • 我已经尝试了几个星期,但没有任何反应:(

标签: php regex preg-match-all


【解决方案1】:

所以你只想一个制作公司的信息?

为什么不干脆去掉 foreach?您目前有一个循环遍历并寻找所有 Production Co. 并返回。

或者您可以将其更改为 While statement 并添加一个计数器,以便它只通过一次。

$arr['productions'] = array();
$i = 0;
while($i < 1) {
   $m = $this->match('/<a.*?>(.*?)<\/a>/ms', 
       $this->match('/Production Co.?:(.*?)(<\/div>|See more)/ms', $html, 1)
    , 1);
   array_push($arr['productions'], $m);
   $i++;
}

不确定语法是否完全正确,但应该让您朝着正确的方向前进。请记住,我不熟悉该插件,或者我是否完全理解您要完成的工作。

【讨论】:

  • 感谢您的回答,但我收到此错误“解析错误:语法错误,意外 T_AS”
  • 我在这行代码中收到“致命错误:超过 30 秒的最大执行时间”:function match($regex, $str, $i = 0){ if(preg_match($regex, $str, $match) == 1) return $match[$i]; else return false; }
  • 酷,我没有收到任何错误,但帖子只显示一个逗号。
  • 在原始代码 sn-p 中,; 的末尾有一个 `。有必要吗?不确定这是否只是一个错字等。
  • 问题可能是我们没有在任何地方分配$m。尝试将其更改为$m = $this-&gt;match...
猜你喜欢
  • 2016-09-23
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多