You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 17复杂正则表达式求助:匹配Metric Set并提取分段

Java 17 正则匹配与提取 Metric Set 分段

正则规则拆解

先明确每个Token的正则片段(Java字符串需转义特殊字符):

  • Distance Token: \\d+" → 匹配1个以上数字加双引号(如12")
  • Numeric Token: -?\\d+ → 匹配带可选负号的数字(如-4、2)
  • Random Token: \\d*D[36] → 匹配可选数字前缀加D3/D6(如12D3、D6)
  • Not-applicable Token: N/A → 精确匹配该字符串
  • Greater-than Token: \\d+\\+ → 匹配1个以上数字加+(如3+)
  • Ignorables Token: Melee|Ranged → 精确匹配两个指定字符串

再根据各Segment允许的Token组合,拼接出每段的正则:

  • 第1段: 允许Distance、Random、Ignorables、Not-applicable → (\\d+"|\\d*D[36]|Melee|Ranged|N/A)
  • 第2、4、5、6段: 允许Numeric、Random、Not-applicable、Greater-than → (-?\\d+|\\d*D[36]|N/A|\\d+\\+)
  • 第3段: 允许Greater-than、Random、Not-applicable → (\\d+\\+|\\d*D[36]|N/A)

完整Java 17实现代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MetricSetMatcher {
    public static void main(String[] args) {
        // 构建完整正则表达式:匹配6个Segment,用1个或多个空白分隔
        String regex = "\\b(\\d+\"|\\d*D[36]|Melee|Ranged|N/A)\\s+" +
                       "(-?\\d+|\\d*D[36]|N/A|\\d+\\+)\\s+" +
                       "(\\d+\\+|\\d*D[36]|N/A)\\s+" +
                       "(-?\\d+|\\d*D[36]|N/A|\\d+\\+)\\s+" +
                       "(-?\\d+|\\d*D[36]|N/A|\\d+\\+)\\s+" +
                       "(-?\\d+|\\d*D[36]|N/A|\\d+\\+)\\b";

        Pattern pattern = Pattern.compile(regex);

        // 测试示例字符串
        String[] testStrings = {
            "Flamer [IGNORES COVER, TORRENT] 12\" D6 N/A 4 0 1",
            "18\" 2 3+ 9 -4 D6"
        };

        for (String input : testStrings) {
            Matcher matcher = pattern.matcher(input);
            if (matcher.find()) {
                System.out.println("匹配到的Metric Set分段:");
                System.out.println("第1段:" + matcher.group(1));
                System.out.println("第2段:" + matcher.group(2));
                System.out.println("第3段:" + matcher.group(3));
                System.out.println("第4段:" + matcher.group(4));
                System.out.println("第5段:" + matcher.group(5));
                System.out.println("第6段:" + matcher.group(6));
                System.out.println("---");
            } else {
                System.out.println("输入字符串:\"" + input + "\" 未匹配到Metric Set");
            }
        }
    }
}

代码说明

  1. 正则编译:用Pattern.compile()预编译正则,提升重复匹配效率
  2. 匹配逻辑:调用matcher.find()查找输入字符串中的匹配子串
  3. 分段提取:通过matcher.group(n)获取第n个Segment的内容(n从1到6)
  4. 边界处理:用\\b确保匹配的是完整的Token,避免部分匹配(比如不会把12D34误判为Random Token)

运行输出

匹配到的Metric Set分段:
第1段:12"
第2段:D6
第3段:N/A
第4段:4
第5段:0
第6段:1
---
匹配到的Metric Set分段:
第1段:18"
第2段:2
第3段:3+
第4段:9
第5段:-4
第6段:D6
---

内容的提问来源于stack exchange,提问作者hotmeatballsoup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:53:13