首先:我并不擅长使用正则表达式。现在这一点已经摆在桌面上了。
我正在构建一个使用组和可选组件的正则表达式。问题在于,我需要匹配两个不同区域中的某个数字,并给它们相同的组名。但是这似乎行不通。
具体来说,我正在分析来自JVM的垃圾收集日志。这两行是一个完整的 GC 和一个普通的 GC。
为了便于阅读,我将它们分成了几行。
完整的行:
如您所见,Full GC 的第一个字段区域是CMS/tenured generation。第二个区域没有这些内容,只是常规集合。
为了捕获它们,我正确地使“CMS:”和“ParNew:”部分互相可选。然而,我想把每个部分的时间作为一个组名(在我加上**的值中)。
我使用以下正则表达式:
\d+.\d+: [(Full\s)?GC\s\d+.\d+: [(CMS:\s(?<JVM_TenuredGenHeapUsedBeforeGC>\d+)+K->(?<JVM_TenuredHeapUsedAfterGC>\d+)K(\d+K),\s(?<JVM_GCTimeTaken>\d+.\d+)\ssecs)? (ParNew:\s(?\d+)+K->(?<JVM_NewGenHeapUsedAfterGC>\d+)K((?<JVM_NewGenHeapSize>\d+)K),\s(?<JVM_GCTimeTaken>\d+.\d+)\ssecs)?] .. [已编辑以简洁为主]
简而言之...是否可能在不同的可选匹配项上使用相同的组名?它们永远不会在同一行上,所以我不知道为什么不能做到这一点。
使用regexr测试似乎也失败了。谢谢!
具体来说,我正在分析来自JVM的垃圾收集日志。这两行是一个完整的 GC 和一个普通的 GC。
为了便于阅读,我将它们分成了几行。
完整的行:
229980.058: [Full GC 229980.058:
[CMS: 2796543K->2796543K(2796544K), **13.3050667** secs]
2983863K->2872464K(4067264K),
[CMS Perm : 325367K->325242K(1048576K)], 13.3054416 secs]
[Times: user=13.27 sys=0.03, real=13.31 secs]
常规的代码行:
2.752: [GC 2.752:
[ParNew: 1143680K->4938K(1270720K), **0.0243534** secs]
1143686K->4945K(4067264K), 0.0245283 secs]
[Times: user=0.05 sys=0.02, real=0.03 secs]
如您所见,Full GC 的第一个字段区域是CMS/tenured generation。第二个区域没有这些内容,只是常规集合。
为了捕获它们,我正确地使“CMS:”和“ParNew:”部分互相可选。然而,我想把每个部分的时间作为一个组名(在我加上**的值中)。
我使用以下正则表达式:
\d+.\d+: [(Full\s)?GC\s\d+.\d+: [(CMS:\s(?<JVM_TenuredGenHeapUsedBeforeGC>\d+)+K->(?<JVM_TenuredHeapUsedAfterGC>\d+)K(\d+K),\s(?<JVM_GCTimeTaken>\d+.\d+)\ssecs)? (ParNew:\s(?\d+)+K->(?<JVM_NewGenHeapUsedAfterGC>\d+)K((?<JVM_NewGenHeapSize>\d+)K),\s(?<JVM_GCTimeTaken>\d+.\d+)\ssecs)?] .. [已编辑以简洁为主]
简而言之...是否可能在不同的可选匹配项上使用相同的组名?它们永远不会在同一行上,所以我不知道为什么不能做到这一点。
使用regexr测试似乎也失败了。谢谢!