如何使用 php 从大文本文件中提取信息值

How can I Extract values with information from big text file using php

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

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

我需要获取的示例数据

TRAFFIC MEASUREMENT REPORT PART     2/    6 VLR MEASUREMENT            VLRMEAS 

SAMPLE DATE:    FROM    2020-10-22 14:00:00:09
                TO      2020-10-22 15:00:00:13

REGISTERED SUBSCRIBERS:


LOCATION AREA CODE     CURRENT     AVERAGE        TMS1        TMS2        TMS3
       UNKNOWN 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
TOTAL                   768477      767939           0           0           0

PART     2/    6
END OF REPORT

来自大文件(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);
     }
    }

我每个块只得到一行

TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS
PART 2/ 6
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS
PART 2/ 6
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS
PART 2/ 6
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS
PART 2/ 6

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

一种选择是使用 preg_match_all and file_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