gpt4 book ai didi

java - 正则表达式分组和可选匹配

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:11:17 25 4
gpt4 key购买 nike

首先:我不擅长正则表达式。现在,它已经摆在桌面上了。我正在构建一个使用组和可选组件的正则表达式。我遇到的问题是,我需要在两个不同的区域匹配某个数字,并给它们相同的组名。这似乎不起作用。

所以具体细节。我正在分析来自 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(? \d+)+K->(? \d+ )K(\d+K),\s(? \d+.\d+)\ssecs)? (ParNew:\s(?\d+)+K->(? \d+)K((? \d+)K),\s(? \d+.\d+)\ssecs )?] .. [为简洁起见编辑]

简而言之.. 是否可以在不同的可选匹配项上使用相同的组名?他们永远不会在同一条线上,所以我不知道为什么我不能把它拉出来。

用 regexr 测试这个似乎也失败了。谢谢!

最佳答案

The issue I have, is that I need to match a certain number in two different areas, and give them the same group name.

我会说这就是问题所在。我没试过这个,但我看到更改列表引入了命名组,那只是命名一个编号组。所以它不能工作。

给他们不同的名字并使用类似的东西

Objects.firstNonNull(m.group("foo"), m.group("bar"))

如果您确定其中至少有一个是非空的(否则您会得到一个 NPE)。或者编写您自己的空接受单行代码。

关于java - 正则表达式分组和可选匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20055116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com