正则表达式捕获组如何处理这个特定的日志语句

How does regex capture groups work on this particular log statement

我已经为下面的日志语句构造了正则表达式,并尝试添加捕获组,以便我可以将每个组分配给一个变量并打印它们。当我添加括号作为捕获块时,我得到空值。我可以在正则表达式下方添加捕获组吗?

日志:

2022-02-09 10:00:52,785 EST|2022-02-09 10:00:52.785 CST 48767a165b22 [INFO ] CorrelationId=d0b0005a-56aa-4e23-a00e-7b22bc41d001 ApplicationName=ATSystems [http-nio-8080-exec-8] com.jivasciences.jrx.mo.bundle.app.transform.handler.bundleHandler - ReceivedDate=2022-02-09 10:00:56

我想从中捕获以下组:

到目前为止我的正则表达式:

([0-9]+(-[0-9]+)+) [0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]{1,3})?,[0-9]+ [a-zA-Z]+|[0-9]{4}-[0-9]{2}-[0-9]{2} (([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?(:([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?)+) [a-zA-Z]+ ([0-9]+([a-zA-Z]+[0-9]+)+) \[[^\]]*] CorrelationId=[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]? ApplicationName=[a-zA-Z]+ \[[^\]]*] [a-zA-Z]+(\.[a-zA-Z]+)+ - ReceivedDate=([0-9]+(-[0-9]+)+) ([0-9]+(:[0-9]+)+)

试试这个:

[0-9 ,.:-]+ [A-Z]{3}\|[0-9 ,.:-]+ [A-Z]{3} ([0-9a-f]+) \[(\w+) *].*?=([0-9a-f-]+).*?=(\w+).*?\] ([\w.]+).*?=([0-9-]+ [0-9:]+)

live demo


更具可读性的格式:

[0-9 ,.:-]+ [A-Z]{3}\|[0-9 ,.:-]+ [A-Z]{3} ([0-9a-f]+) \[(\w+) *].*?=([0-9a-f-]+).*?=(\w+).*?\] ([\w.]+).*?=([0-9-]+ [0-9:]+)

这个模式应该可以做到。

^.*?\|.*?\s(\w{9,})\s\[([A-Z]+).*?CorrelationId=\{?([a-f0-9-]{36})\}?\sApplicationName=(.*?)\s\[.*?\]\s(\S+)\s-\sReceivedDate=([\d\-]{10}\s[\d:]{8}).*$

第一部分已简化,因为不需要这些时间戳。

测试regex101