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

Java正则表达式匹配三位版本格式失效问题求助

正则表达式匹配问题解决

问题描述

现有Java代码如下:

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

public class Main {
    public static void main(String args[]) {
        String pageText = "Other Strings 9.5.1 My Other Strings";
        String pageText2 = "Other Strings 9.3.1.1.1 My Other Strings";
        Pattern anyServicePattern = Pattern.compile("(\\d+\\.){2}[0-9]\\s+[a-zA-Z]+");
        Matcher anyServiceMatcher = anyServicePattern.matcher(pageText);
        if (anyServiceMatcher.find()) {
            System.out.println("Found");
        } else {
            System.out.println("Not Found");
        }
        
        Matcher anyServiceMatcher2 = anyServicePattern.matcher(pageText2);
        if (anyServiceMatcher2.find()) {
            System.out.println("Found");
        } else {
            System.out.println("Not Found");
        }
    }
}

当前程序输出:

Found
Found

期望输出:

Found
Not Found

需求为匹配格式:任意字符 + 数字.数字.数字 + 单个或多个空格 + 任意字符,即仅匹配三段式版本号(如9.5.1),排除更长的多段版本号(如9.3.1.1.1)。

解决方案

修改正则表达式,添加负向预查确保三段式版本号后不会紧跟小数点,避免匹配长版本号的前三个分段。

正确的正则表达式为:

"(\\d+\\.){2}\\d+(?!\\.)\\s+[a-zA-Z]+"

修改后的完整代码

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

public class Main {
    public static void main(String args[]) {
        String pageText = "Other Strings 9.5.1 My Other Strings";
        String pageText2 = "Other Strings 9.3.1.1.1 My Other Strings";
        Pattern anyServicePattern = Pattern.compile("(\\d+\\.){2}\\d+(?!\\.)\\s+[a-zA-Z]+");
        Matcher anyServiceMatcher = anyServicePattern.matcher(pageText);
        if (anyServiceMatcher.find()) {
            System.out.println("Found");
        } else {
            System.out.println("Not Found");
        }
        
        Matcher anyServiceMatcher2 = anyServicePattern.matcher(pageText2);
        if (anyServiceMatcher2.find()) {
            System.out.println("Found");
        } else {
            System.out.println("Not Found");
        }
    }
}

原理说明

  • (\\d+\\.){2}:匹配两段数字+小数点(如9.5.)
  • \\d+:匹配第三个数字段(如1)
  • (?!\\.):负向预查,确保当前位置后不是小数点,排除长版本号的匹配(如9.3.1后面紧跟.时不满足条件)
  • \\s+:匹配一个或多个空格
  • [a-zA-Z]+:匹配后续的字母内容

执行修改后的代码,输出将符合期望:

Found
Not Found

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:12:44