使用PHP正则表达式处理日志文件
我正在使用php查看一个日志文件,该文件如下所示:使用PHP正则表达式处理日志文件,php,regex,logging,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`} 我用省略号表示还有很多其他的东西 还是像
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`}
我用省略号表示还有很多其他的东西
还是像这样
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={.*}
我想为日志文件中的每一行提取{}for TELL{}中的内容。。
请帮帮我,我快疯了哈哈
如果(preg\u match(“/USE\{(?[^}]+)\}/”,$line,$pat)),则表示感谢{
var_dump($pat['insideethe括号]);
}
PHP的文档非常擅长解释这些东西
<?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);
?>
我无法找到可靠的工作方法,但最终得到的是
if (preg_match("/(TELL{)(.*)} (USE{T)/iU ",$data,$matches))
$rowMsg=substr($matches[0],5,-7);
$rowMsg=preg_replace("/[}\. ]{1}\$/",'',$rowMsg);
感谢您的回答,但问题是{}的内部可能有任何字符,包括其他{},唯一的模式是后面跟一个File=或Use{tell}
if (preg_match("/(TELL{)(.*)} (USE{T)/iU ",$data,$matches))
$rowMsg=substr($matches[0],5,-7);
$rowMsg=preg_replace("/[}\. ]{1}\$/",'',$rowMsg);