【问题标题】:Regex: select the XML messages and time stamp from the log正则表达式:从日志中选择 XML 消息和时间戳
【发布时间】:2018-11-25 12:05:30
【问题描述】:

我要将日志流式传输到 nxlog,我需要将 xml 消息推送到 nexlog 服务器,要选择 XML 消息:

(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})(.*)(my sentence 1....|my sentence 2 : [\S+\s+]*>\n)(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})

但我无法从日志中选择所有 XML 消息

https://regex101.com/r/iA8qE5/5

【问题讨论】:

    标签: regex graylog nxlog


    【解决方案1】:

    在您的正则表达式中,您必须在之后使用) 关闭交替:

    (Message Picked from the queue....|Response Message :

    在字符类中使用+ 将具有不同的含义,并且会按字面意思匹配加号。加号是贪婪的,所以你必须使用问号让它不贪婪,让[\S\s]+ 不匹配所有行。

    更新[\S+\s+]*>\n)

    )([\S\s]+?>)\n

    你的对手在第四个捕获组。

    (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})(.*)(Message Picked from the queue....|Response Message : )([\S\s]+?>)\n(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})
    

    Regex demo

    不是说如果你不需要所有的捕获组,你也可以省略它们,只取第一个捕获组(Demo

    【讨论】:

      【解决方案2】:

      它从起始行、消息和 xml 中捕获日期。它使用gms 标志,Demo

      ^([\d-\.\s\:]+)\s.*?-\s([\w\s:\.]+)(<\w+.*?)\n\d{4}
      

      仅限日期和 xml

      ^([\d-\.\s\:]+)\s.*?(<\w+.*?)\n\d{4}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-09
        • 1970-01-01
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多