我试图解析日志文件,其中一些是单行日志,有些是多行。我的正则表达式可以很好地处理单行,但不能处理多行。
^(?<timestamp>d+-d+-d+Td+:d+:d+.d+(+|-)d+:d+)s+[(?<severity>w+)](?<message>.*)$
这是匹配失败的地方,因为它没有检测到新行之后的字符串。
2022-06-27T15:22:35.508+00:00 [Info] New settings received:
{"indexer.settings.compaction.days_of_week":"Sunday,Monday"}
新行应该包含在"message"分组,直到检测到新的时间戳。
我尝试了多种方法来包含要匹配的换行符,但没有找到任何解决方案。我已经粘贴了两种日志格式的链接:https://regex101.com/r/ftJ3UZ/1.
如果支持向前看,可以在message
组中放置一个可选的重复组,检查下一行不是以类似日期的模式开始的,或者完整的时间戳。
^(?<timestamp>d+-d+-d+Td+:d+:d+.d+([+-])d+:d+)s+[(?<severity>w+)](?<message>.*(?:n(?!d+-d+-d+T).*)*)$
Regex演示
似乎这将匹配:
^(?<timestamp>d+-d+-d+Td+:d+:d+.d+(+|-)d+:d+)s+[(?<severity>w+)](?<message>.*)n(?:{.*})?
我已经删除了$
并在末尾添加了n(?:{.*})?
,以便能够匹配{}
括号内的可选部分。