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

Java正则表达式Matcher或运算时无法提取连续两位数字问题

解决正则提取所有连续数字的问题

你的代码存在几个关键问题,导致无法正确提取所有连续数字:

  • 原正则表达式.*(\d{4})|(\d{3})|(\d{2})|(\d+).*逻辑错误:.*是贪婪匹配,会优先吃掉字符串中大部分内容,且分支结构是让整个字符串匹配其中一种模式,而非查找所有数字序列;分组的设计也只能捕获某一种长度的数字,无法收集所有结果。
  • 仅调用一次matcher.find(),只能获取第一个匹配项,没法提取所有符合条件的数字序列。

正确实现方式

要提取字符串中所有连续数字(包括单个数字),只需用\d+作为正则表达式,循环调用find()方法收集所有匹配结果即可:

public static void main(String args[]) {
    print(checkRegex("2G18R"));
}

private static void print(String arr[]) {
    for(String s : arr) {
        System.out.println(s);
    }
    System.out.println("-----------------------------");
}

private static String[] checkRegex(String str) {
    System.out.println("original string " + str);
    Pattern pattern = Pattern.compile("\\d+");
    Matcher matcher = pattern.matcher(str);
    List<String> resultList = new ArrayList<>();
    while (matcher.find()) {
        resultList.add(matcher.group());
    }
    return resultList.toArray(new String[0]);
}

代码说明

  • \d+:匹配1个或多个连续数字,天然覆盖单个数字和多位数的情况,不需要分长度写多个分支。
  • while (matcher.find()):循环查找所有匹配的数字序列,每次找到后将结果加入列表。
  • 最后将列表转为字符串数组返回,运行后会输出你期望的2和18。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:52:09