【问题标题】:Processing log files with PHP regular expressions使用 PHP 正则表达式处理日志文件
【发布时间】:2011-06-17 22:04:35
【问题描述】:

我正在使用 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={.*} 我想为日志文件中的每一行提取 {}'s for TELL{} 中的内容。 请帮帮我,我快疯了哈哈

谢谢

【问题讨论】:

  • 感谢您的回复,但问题是在 {} 内可能有任何字符,包括其他 {},唯一的模式是它后跟 File= 或 Use{告诉}

标签: php regex logging


【解决方案1】:
if (preg_match("/USE\{(?<insideTheBrackets>[^\}]+)\}/", $line, $pat)) {
    var_dump($pat['insideTheBrackets']);
}

【讨论】:

    【解决方案2】:

    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);
    ?>
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-04-08
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 2022-06-10
        • 2015-12-09
        • 1970-01-01
        • 2010-09-07
        相关资源
        最近更新 更多