preg_match_all找不到大文本文件中的所有模式

时间:2014-01-26 20:19:31

标签: php regex preg-match-all

我正在尝试构建一个FaH统计信息刮刀。每隔一小时,新更新的统计信息列表就会通过cronwget被提取到我的服务器中http://chrislabs.info/statsFile.txt。这是使用$pagefile_get_contents脚本中打开的。

然后,对于唯一团队编号列表(第四列),我正在尝试使用以下代码正则表达包含该团队编号的所有行:

foreach($teamArr as $team){
    $pattern = "/(.*[ascii])\t([0-9]*)\t.*[0-9]\t$team/";
    preg_match_all($pattern, $page, $matches);
    echo "<pre>";
    print_r($matches);
    echo "</pre>";

然而,这并没有找到$page中的所有匹配项,而我现在对于要解决的问题感到茫然。我已将pcre.* INI设置更改为1GB。

您可以在此处查看输出http://chrislabs.info/FoldingStats_MYSQL.php

1 个答案:

答案 0 :(得分:3)

尝试使用它:

$pattern = '~^(?:\S++\t){3}' . $team . '$~m';

您的模式未找到所有匹配项,因为您添加的[ascii]仅匹配字母a或字母s或字母c或字母i。如果您想匹配所有字母,您必须使用[a-z]

另一种方法是使用fgetcsv并删除所有非您正在寻找的团队的记录。

您还可以使用两个explode()第一个\n,第二个\t,并为您的团队检查$item[3]