【问题标题】:preg_match_all not finding all the patterns in a large text filepreg_match_all 没有在大文本文件中找到所有模式
【发布时间】:2014-01-26 20:19:30
【问题描述】:

我正在尝试构建一个FaH 统计数据刮板。每小时都会通过cronwget 将新更新的统计信息列表拉到我的服务器上,并放入这个文件http://chrislabs.info/statsFile.txt。这是在脚本中以$page 使用file_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

【问题讨论】:

    标签: php regex preg-match-all


    【解决方案1】:

    尝试使用这个:

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

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

    另一种方法是使用fgetcsv 并删除所有不属于您要查找的团队的记录。

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

    【讨论】:

    • 谢谢,是的。我将模式改为 $pattern = "/(.*[[:ascii:]])\t([0-9]*)\t.*[0-9]\t$team/";跨度>
    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多