【问题标题】:How can I Extract values with information from big text file using php如何使用 php 从大文本文件中提取包含信息的值
【发布时间】:2021-04-08 15:08:37
【问题描述】:

我正在尝试从文本文件中获取一些数据,这些数据在每行随机重复一次

我正在尝试从文本文件中获取它,并且有很多 2/6 块。我需要使用 aloop 来获取它们。

我需要获取的示例数据

流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 样品日期:从 2020-10-22 14:00:00:09 至 2020-10-22 15:00:00:13 注册用户: 位置 区域代码 当前平均 TMS1 TMS2 TMS3 未知 LAC 2 2 0 0 0 113 75868 75749 0 0 0 115 40627 40732 0 0 0 1102 70422 70489 0 0 0 1105 87075 87067 0 0 0 1117 56150 56180 0 0 0 1118 67175 67444 0 0 0 1120 74385 74381 0 0 0 1121 65034 65060 0 0 0 1122 21636 21407 0 0 0 1217 22944 22856 0 0 0 1218 49054 48993 0 0 0 1318 24283 24066 0 0 0 1418 16366 16350 0 0 0 2118 17812 17674 0 0 0 2120 79644 79489 0 0 0 合计 768477 767939 0 0 0 第 2 部分/第 6 部分 报告结束

来自大文件(1/6 ,3/6 等)。

我试过这样做

    $lines = file($file,FILE_IGNORE_NEW_LINES);
    foreach ($lines as $line){
     if(strstr($line,'2/    6')){
         echo $line .'<br>';
     }elseif (preg_match('/(\w+)\s+(\d\end\:\report\d)\s+-->/', $line, $match)){
         print_r($match);
     }
    }

我从每个块中只得到一行

流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 第 2 部分/第 6 部分 流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 第 2 部分/第 6 部分 流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 第 2 部分/第 6 部分 流量测量报告第 2 部分/ 6 VLR 测量 VLRMEAS 第 2 部分/第 6 部分

我希望你能让我好起来,我试图找到任何答案,但我找不到我想要的。

【问题讨论】:

    标签: php text preg-match preg-match-all preg-grep


    【解决方案1】:

    一种选择是使用preg_match_allfile_get_contents 以及如下模式:

    ^.*\d/\h*\d.*(?:\R.*)*?\REND OF REPORT\b
    

    或者使用模式中的确切数字

    ^.*2/\h*6.*(?:\R.*)*?\REND OF REPORT\b
    
    • ^ 字符串开始
    • .*\d/\h*\d.* 匹配一行和一个数字 / 可选空格和一个数字,然后是该行的其余部分
    • (?:\R.*)*? 尽可能少地重复行
    • \R 匹配换行符
    • END OF REPORT\b 匹配 END OF REPORT 和单词边界以防止部分单词匹配

    Regex demo | Php demo

    $file = "myfile.txt";
    $str = file_get_contents($file);
    $re = '`^.*\d/\h*\d.*(?:\R.*)*?\REND OF REPORT\b`m';
    preg_match_all($re, $str, $matches);
    print_r($matches[0]);
    

    输出将是一个包含所有匹配部分的数组。


    或其他变体:

    ^.*\d/\h*\d.*(?:\R(?!END OF REPORT).*)*\REND OF REPORT\b
    

    Regex demo

    【讨论】:

    • 它很完美,但直到获得其他数据,例如 1/6 和 3/6 块,我只需要文本文件中的 2/6 块
    • @user15584147 然后你可以使用模式中的数字^.*2/\h*6.*(?:\R.*)*?\REND OF REPORT\bregex101.com/r/E6NOKw/1
    • 非常感谢,它可以工作,但需要设置样式,都在一行中。
    • 样式是什么意思?
    • 没关系,我会做的,非常感谢
    猜你喜欢
    • 2023-03-28
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 2012-01-16
    • 2022-12-04
    相关资源
    最近更新 更多