我正在尝试解析一个包含大量跟踪的日志文件,其中一些跟踪有多行。
例子:
[trace-123] <request>This is a log line</request>
[trace-124] <reply>This is another log line
this is part of "[trace-124]" still.</reply>
[trace-125] <request>final log line.</request>
我正在尝试使用 preg_match_all 来获取所有痕迹的数组。
$file = file_get_contents("traces.txt");
$tracePattern = "/(\[trace-[0-9]*+\]+[\s\S]*)(?<=\<\/reply>|\<\/request>)/";
preg_match_all($tracePattern,$file,$lines);
echo "<pre>";print_r($lines);echo "</pre>";
理想情况下,我希望我的结果如下所示:
Array
(
[0] => [trace-123] <request>This is a log line</request>
[1] => [trace-124] <reply>This is another log line
this is part of "[trace-124]" still.</reply>
[2] => [trace-125] <request>final log line.</request>
)
但是当我运行它时,我得到一个数组,其中包含数组的 1 个元素中的所有内容。当我写表达式时,我的目标基本上是寻找:
[trace-\[0-9]*\]
并找到从那场比赛到下一场比赛的所有内容。
我找到
\[trace-[0-9]*+\].*
效果很好,但是当有换行符时会崩溃。