繁体   English   中英

正则表达式:按括号分隔,忽略嵌套括号

[英]regex: split by brackets ignore nested brackets

我正在尝试解析一些Java GC日志,但无法超时。

格式如下:

[GC x.xxx: [ParNew: ...K->...K(...K), y.yyyyyy secs] ...->...K(...), z.zzzzzz secs]

我需要y.yyyyyy秒和z.zzzzzz秒。 格式并不总是如此精确。 我非常需要GC时间和ParNew时间,它们始终位于各自括号的末尾。 (ParNew括号嵌套在GC括号内,有时甚至会有更多嵌套的括号)

我找到了一些用于嵌套括号而不是括号的RegEx,但是我很难将其转换为括号。

这是括号的RegEx:

(?<=\()(?:[^()]+|\([^)]+\))+

任何帮助,将不胜感激。

谢谢。

编辑

这是另一种格式:

2015-06-18T16:12:52.546-0400: 230.643: 
[Full GC 230.643: [CMS2015-06-18T16:13:01.671-0400: 239.767: [CMS-
concurrent-mark: 9.342/9.342 secs] 
[Times: user=9.41 sys=0.02, real=9.34 secs (concurrent mode failure):
 5392703K->5392703K(5392704K), 26.8121270 secs] 6179135K-
>6073557K(6179136K), [CMS Perm : 32344K->32344K(262144K)], 26.8122780 secs] 
[Times: user=25.86 sys=0.03, real=26.81 secs] 

在这里,我需要[CMS2015-06-18...支架的时间是26.8121270 secs

编辑2

这是ParNew格式的实际示例:

2015-06-18T16:09:03.284-0400: 1.381: [GC 1.381: [ParNew: 674112K-
>112320K(786432K), 4.5234120 secs] 674112K->541274K(6179136K), 
4.5235390 secs] [Times: user=12.53 sys=0.77, real=4.52 secs] 

在这里,我需要4.5235390 secsParNew:时间ParNew:

这两种格式是我需要解析的主要格式。

这实际上取决于您其他括号的位置。

我这样做了,假设可以在ParNew:嵌套更多的括号ParNew:

(?<=\\[GC)(?:.*)(?:\\[ParNew.*?)(?:(?:\\[.*\\]).*?)*(\\d+(?:\\.\\d+)? secs)\\].*?(\\d+(?:\\.\\d+)? secs)

https://regex101.com/r/yZ6cF3/1

我添加了一些带有额外嵌套括号的示例,这些括号也以x.xxx secs结尾并且未被捕获。

棘手的部分是(?:(?:\\[.*\\]).*?)* ,它添加了在其中包含任意数量的括号但忽略它们的选项。

这是给定示例的演示(?<=GC)(?:.*)(?:\\[(?:ParNew|CMS20.*?):.*?)(?:(?:\\[.*\\]).*?)*(\\d+(?:\\.\\d+)? secs)\\].*?(\\d+(?:\\.\\d+)? secs)(?:\\])(?:(?:[.*])*)https : //regex101.com/r/iY9wQ1/2

请注意,我添加了(?:ParNew|CMS20.*?)或您感兴趣的变量的任何其他开头。如果不这样做,就不能保证它会起作用。

此正则表达式适用于我:

([0-9]+\.[0-9]+)(?=\W*secs])

这是一个例子 在这种情况下,每个数字都将在一个捕获组中。

该正则表达式的作用基本上是:

  • 捕获组的十进制数字(一个或多个数字,立即数,然后是一个或多个数字)
  • 前瞻:
    • 一个或多个空格
    • 文字文本sec]

由于您说的并非总是采用这种精确格式,因此我认为这意味着数字和“秒”之间的空格可能会有所不同。 如果您要更改的其他部分,请告诉我们,我们将提供经过修改的正则表达式。

如果您要搜索字符串“ real”之后的时间,则此代码可以在C#中使用(我不是Java人)

 (?ixs)(?<=real\s{0,}=\s{0,})\d{1,}(\.\d{1,})*? \s{1,}secs

这给了我2个值:9.34和26.81

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM