0

这真是太棒了。这种模式在 javascript 中完美运行。我不知道该怎么做。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://yugioh.wikia.com/wiki/List_of_Yu-Gi-Oh!_BAM_cards'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$chHtml = curl_exec($ch);
curl_close($ch);
$patt = '/<table class="wikitable sortable card-list">[\s\S]*?<\/table/im'; //////////////this 
preg_match($patt, $chHtml, $matches);

是问题线

如果我让它变得贪婪

[\s\S]*

它工作正常,但它一直持续到最后

4

1 回答 1

1

该模式没有任何问题,问题是您需要比默认设置更大的回溯限制。

解释:

在这样的正则表达式问题中,总是使用preg_last error().

如果您在提交的站点的特定响应中使用它,因为这是一个资源问题,并且较小的文本不会引发错误,您将看到您得到一个PREG_BACKTRACK_LIMIT_ERROR.

解决方案:

要克服此限制,您可以在脚本开始时使用以下内容来提高它:

ini_set ('pcre.backtrack_limit', 10000000);
于 2013-10-06T08:36:16.470 回答