2012-12-30 28 views
0

我有一个文本文件,我尝试使用pregmatch冒号后直接拉动信息一堆的日志记录,比如我有:PHP pregmatch后一个信息提取值

04:28 :17.409 [主要:1 - Bootstrapper.LogSystemInfo]操作系统体系结构:64位 04:28:17.409 [主要: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]; 

我什么也没有返回

身体是一个巨大的日志文件,所以我只是拉相关信息的片段上方,所以希望多数民众赞成不够。 Theres约8这些全部在像上面的例子的新行,所以如果我得到一个生病就能够得到所有

+0

我认为你需要逃避'<' and '>'这样的'\ '还可以在最后一个'/'后面加'is'它会增加多行搜索和不区分大小写。 –

+2

当然,如果您从文本文件中读取这些内容,这些行会被换行符打断? ('\ r?\ n')'
'是一个HTML元素,不是普通的换行符 – SmokeyPHP

+1

@Ryan:有11个字符有特殊的含义:开方括号[,反斜线\,插入符号^,美元标记$,周期或圆点,竖线或管道符号|,问号?,星号或星号*,加号+,圆括号(以及圆括号)。 – sdjuan

回答

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_bit$os_service_pack将是数组,所以调试你可能想使用print_r($os_bit);

+0

这个似乎有伎俩,用提供的信息来实现它可能不是一个容易的任务猜测,所以感谢所有尝试过的人 – user1547410

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 
)