2011-06-17 38 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); 
?>