Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP正则表达式处理日志文件_Php_Regex_Logging - Fatal编程技术网

使用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`} 我用省略号表示还有很多其他的东西 还是像

我正在使用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 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);