使用Regex和Java从未知形式中选择样式并选择所需的值

时间:2019-04-24 13:31:04

标签: java regex

我很想弄清楚这个正则表达式!和其他所有人一样,此后收效甚微。

字符串如下:##标题##

  

15:26:04,017 INFO [stdout] (Log4j2-xxxxxxxxx-1) 2019-04-23 15:26:03,945 [ http-xxxxxxxxx-4] [ STANDARD] [ ] [ xxxxxxxxx:8] (rnal.loaders.xxxxxxxxx) INFO xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx|1xxxxxxxxx4|Rest|SystemManagement|v2|importxxxxxxxxxd1070581a|xxxxxxxxxPSUYP7A - The import WORK- PxxxxxxxxxWARNING #xxxxxxxxx.591 GMT

分解以上内容时的模式如下:

15:26:04
017
INFO 
stdout
Log4j2-xxxxxxxxx-1
2019-04-23 
15:26:03
http-xxxxxxxxx-4
STANDARD
[] 
[xxxxxxxxx:8] 
rnal.loaders.xxxxxxxxx
INFO
xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx
1xxxxxxxxx4
Rest
SystemManagement
v2
importxxxxxxxxxd1070581a
xxxxxxxxxPSUYP7A 
The import WORK- PxxxxxxxxxWARNING #xxxxxxxxx.591
GMT

任何有关这种疯狂模式的帮助都将很棒!有人告诉我,使用[.*?]可以帮助将X放在方括号中,但是它仍然困扰着我,我不知道如何解决这个问题(.replace,。包含.indexOf),但我知道使用Regex更为简洁。

更新 是的,即使有您的建议,我也无法提出一个被认可的角色。

我还注意到SSH日志的格式不尽相同:

12:30:58,818 INFO  [x] (x:x, x: [x], Partitions=[0,1,3]) lefd version : 0.11.0.3

所以上面的形式是不同的:

15:26:04,017 INFO [stdout] (Log4j2-xxxxxxxxx-1) 2019-04-23 15:26:03,945 [ http-xxxxxxxxx-4] [ STANDARD] [ ] [ xxxxxxxxx:8] (rnal.loaders.xxxxxxxxx) INFO xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx|1xxxxxxxxx4|Rest|SystemManagement|v2|importxxxxxxxxxd1070581a|xxxxxxxxxPSUYP7A - The import WORK- PxxxxxxxxxWARNING #xxxxxxxxx.591 GMT

因此,我认为这完全超出了我对Regex知识的了解-即使regex可以将所有这些内容拆分为任何形式。

1 个答案:

答案 0 :(得分:0)

This RegEx可以帮助您设计完整的正​​则表达式并匹配您的模式。模式似乎并不复杂,只是很长:

([0-9:]+)(,[0-9]{3})\s([A-Z]+)\s[[a-z]+]\s(\(Log4j2-x{9}-1\))

匹配这种长模式的一种简单方法是使用组()并将输入字符串分成多个部分。


不清楚您的问题是哪些字符是动态的还是静态的,以及什么可能是x。但是,您可以简单地使用组并继续此RegEx并创建完全匹配项:

enter image description here