使用PHP正则表达式处理日志文件

时间:2011-06-17 22:04:35

标签: php regex logging

我使用php浏览日志文件,它看起来像这样:

11/06/05 09:17:59 TORMS068 11/06/05 09:17:59.234 TORMS068\Admin ... EPTH{2} ITEMIX{8} TELL{`` sdcsit49 - FileSystem /oracle/REF/sapdata2 Critical - MSGREC:1727:100 ``} USE{TELL} ATTACHMENT... xact{`NO`}

我使用Ellipses来展示还有很多其他东西

或者喜欢这个

11/06/05 11:29:38 TORM ... H{3} ITEMIX{5} TELL{``marble: initiator SCSI ID now 7 } File={ /var/adm/messages } - MsgRec 5174:406``} USE{TELL} ATTACHMENT{} UserParms{}   AnswerWait{`10`} BaudRate{`1200`} C... eviceId{``} TellExact{`NO`}

接下来是 USE {TELL} File = {。*} 我想为日志文件中的每一行提取TELL {}的{}中的内容。 请帮助我,我要疯了哈哈

由于

3 个答案:

答案 0 :(得分:0)

if (preg_match("/USE\{(?<insideTheBrackets>[^\}]+)\}/", $line, $pat)) {
    var_dump($pat['insideTheBrackets']);
}

答案 1 :(得分:0)

PHP的regular expression文档非常擅长解释这些内容......

<?php
$str = "11/06/05 11:29:38 TORM ... H{3} ITEMIX{5} TELL{``marble: initiator SCSI ID now 7 } File={ /var/adm/messages } - MsgRec 5174:406``} USE{TELL} ATTACHMENT{} UserParms{}   AnswerWait{`10`} BaudRate{`1200`} C... eviceId{``} TellExact{`NO`}";
$pat = '/TELL{(``.*``)}/';
preg_match($pat,$str,$matches);
print_r($matches);
?>

答案 2 :(得分:0)

好吧,我无法获得可靠的工作方法,但我最终得到的是

if (preg_match("/(TELL{)(.*)} (USE{T)/iU ",$data,$matches)) 
    $rowMsg=substr($matches[0],5,-7);
$rowMsg=preg_replace("/[}\. ]{1}\$/",'',$rowMsg);