2011-06-17 36 views
-1

林经历一个日志文件,使用PHP和它看起来既像这样:用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`} 

当我用省略号显示有很多其他的东西

OR这样

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}文件= {。*} 我想提取的是在{}的对TELL {}在日志文件中每行.. 请帮助我,我要疯了笑

感谢

+0

谢谢你的回复,但问题是在{}内可能有任何字符,包括其他{} s,唯一的模式是它后跟一个File =或Use {tell} – mrBorna

回答

0

嗯,我不能得到一个可靠的方法来工作,但我结束了同是

if (preg_match("/(TELL{)(.*)} (USE{T)/iU ",$data,$matches)) 
    $rowMsg=substr($matches[0],5,-7); 
$rowMsg=preg_replace("/[}\. ]{1}\$/",'',$rowMsg); 
0
if (preg_match("/USE\{(?<insideTheBrackets>[^\}]+)\}/", $line, $pat)) { 
    var_dump($pat['insideTheBrackets']); 
} 
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); 
?>