正则表达式:从日志中选择 XML 消息和时间戳
Posted
技术标签:
【中文标题】正则表达式:从日志中选择 XML 消息和时间戳【英文标题】:Regex: select the XML messages and time stamp from the log 【发布时间】:2018-11-25 12:05:30 【问题描述】:我要将日志流式传输到 nxlog,我需要将 xml 消息推送到 nexlog 服务器,要选择 XML 消息:
(\d4-\d2-\d2 \d2:\d2:\d2.\d3)(.*)(my sentence 1....|my sentence 2 : [\S+\s+]*>\n)(\d4-\d2-\d2 \d2:\d2:\d2.\d3)
但我无法从日志中选择所有 XML 消息
https://regex101.com/r/iA8qE5/5
【问题讨论】:
【参考方案1】:在您的正则表达式中,您必须在之后使用)
关闭交替:
(Message Picked from the queue....|Response Message :
在字符类中使用+
将具有不同的含义,并且会按字面意思匹配加号。加号是贪婪的,所以你必须使用问号让它不贪婪,让[\S\s]+
不匹配所有行。
更新[\S+\s+]*>\n)
到
)([\S\s]+?>)\n
你的对手在第四个捕获组。
(\d4-\d2-\d2 \d2:\d2:\d2.\d3)(.*)(Message Picked from the queue....|Response Message : )([\S\s]+?>)\n(\d4-\d2-\d2 \d2:\d2:\d2.\d3)
Regex demo
不是说如果你不需要所有的捕获组,你也可以省略它们,只取第一个捕获组(Demo)
【讨论】:
【参考方案2】:它从起始行、消息和 xml 中捕获日期。它使用gms
标志,Demo
^([\d-\.\s\:]+)\s.*?-\s([\w\s:\.]+)(<\w+.*?)\n\d4
仅限日期和 xml
^([\d-\.\s\:]+)\s.*?(<\w+.*?)\n\d4
【讨论】:
以上是关于正则表达式:从日志中选择 XML 消息和时间戳的主要内容,如果未能解决你的问题,请参考以下文章