gpt4 book ai didi

java - 基于正则表达式的分割模式

转载 作者:行者123 更新时间:2023-12-01 15:15:24 25 4
gpt4 key购买 nike

我正在尝试编写一个程序来解析Java垃圾收集日志。我刚刚创建了一个与次要集合匹配的语法。一旦我确定了一个模式,我想将其解析为单独的标记。我的问题是,有没有什么优雅的方法可以用我之前定义的语法来做到这一点?

public class RegexTestHarness {
private final static String REGEX_SMALL_COLLECTION = "\\d+\\.\\d+: \\[GC \\d+.\\d+: \\[ParNew: \\d+K\\-\\>0K\\(\\d+K\\), \\d+.\\d+ secs\\] \\d+K\\-\\>\\d+K\\(\\d+K\\), \\d+.\\d+ secs\\]";

public static void main(String[] args){
Pattern pattern = Pattern.compile(REGEX_SMALL_COLLECTION);
Matcher matcher = pattern.matcher("54.770: [GC 54.770: [ParNew: 5232768K->0K(5237824K), 1.1304192 secs] 5238622K->380448K(10480704K), 1.1306410 secs]");
while (matcher.find()) {
System.out.println(matcher.group(0));
System.out.println(matcher.start());
System.out.println(matcher.end());
}
}
}

最佳答案

您需要将组添加到正则表达式中。

private final static String REGEX_SMALL_COLLECTION = "(\\d+\\.\\d+):\\[GC (\\d+.\\d+):\\[ParNew:\\d+K\\-\\>0K\\(\\d+K\\),\\d+.\\d+ 秒\\]\\d+K\\-\\>\\d+K\\(\\d+K\\),\\d+.\\d+ 秒\\]";

然后访问组的值。在上面的示例中,我在您想要的前两项周围添加了括号 - 这告诉正则表达式引擎捕获匹配的子字符串。您将需要添加更多。正如您当前所做的那样,您使用 Matcher.group()得到每个组。请注意,第 0 组始终是整场比赛。其余的从 1 开始编号,按照左括号 (.

关于java - 基于正则表达式的分割模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11670224/

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