0

我有一堆登录文本文件,我试图使用 pregmatch 在冒号后面直接提取信息,例如我有:

04:28:17.409 [Main:1 - Bootstrapper.LogSystemInfo] 操作系统架构:64 位 04:28:17.409 [Main:1 - Bootstrapper.LogSystemInfo] 操作系统服务包:服务包 1

我有这个代码,它适用于我以前使用过的类似代码,但我是一个正则表达式新手,它似乎在这里不起作用:

preg_match('/Operating System Architecture: (.+?)<br>/', $body, $os_bit);
preg_match('/Operating System Service Pack: (.+?)<br>/', $body, $os_service_pack);

但是当我回应这个

echo $os_bit[1];
echo $os_service_pack[1];

我什么也没得到

正文是一个巨大的日志文件,所以我只是提取了上面的相关信息片段,希望这就足够了。像上面的例子一样,其中大约有 8 个都在新的行上,所以如果我得到一个病,就可以得到所有

4

2 回答 2

1

你在使用preg_match日志文件吗?在这种情况下,行尾不应<br>只是换行符 ( \n)。由于点通常不匹配换行符,除非您/s在末尾使用,请尝试:

preg_match('/Operating System Architecture: (.*)/', $body, $os_bit);
preg_match('/Operating System Service Pack: (.*)/', $body, $os_service_pack);

另外,请注意$os_bitand$os_service_pack将是数组,因此要调试您可能想要使用print_r($os_bit);

于 2012-12-30T18:32:34.137 回答
1

以下是我根据提供的数据量得出的结论:

<?php
$body = "
04:28:17.409 [Main:1 - Bootstrapper.LogSystemInfo] Operating System Architecture: 64 bits 
04:28:17.409 [Main:1 - Bootstrapper.LogSystemInfo] Operating System Service Pack: Service Pack 1
04:28:17.409 [Main:1 - Bootstrapper.LogSystemInfo] Operating System Architecture: 64 bits 
04:28:17.409 [Main:1 - Bootstrapper.LogSystemInfo] Operating System Service Pack: Service Pack 1
04:28:17.409 [Main:1 - Bootstrapper.LogSystemInfo] Operating System Architecture: 64 bits 
04:28:17.409 [Main:1 - Bootstrapper.LogSystemInfo] Operating System Service Pack: Service Pack 1";

preg_match_all('/(Operating System Architecture:.*)(\n|$)/i', $body, $os_bit);
preg_match_all('/(Operating System Service Pack:.*)(\n|$)/i', $body, $os_service_pack);

print_r($os_bit[1]);
print_r($os_service_pack[1]);

然后导致:

Array
(
    [0] => Operating System Architecture: 64 bits
    [1] => Operating System Architecture: 64 bits
    [2] => Operating System Architecture: 64 bits
)
Array
(
    [0] => Operating System Service Pack: Service Pack 1
    [1] => Operating System Service Pack: Service Pack 1
    [2] => Operating System Service Pack: Service Pack 1
)
于 2012-12-30T18:41:52.097 回答