java中的正则表达式总是返回true

时间:2017-03-30 07:24:49

标签: java android regex

请你帮我解决android中的以下字符串的正则表达式:

1.0.2 Build S6B5

应该如何:

{number}.{number}.{number}{space}Build{space}{S or D orT}{anything up 3 to 4 chars}

在这里的一些国王的帮助下,我尝试了流动的代码:

if (name.matches("\\d+\\.\\d+\\.\\d+\\s+Build\\s[SDT].{3,4}"));

但即使是:

也始终返回True
1.0.1 4C0

1.0.1 B 4BD

1.0.4.52A

2 个答案:

答案 0 :(得分:0)

尝试the following code

public static void main (String[] args) {

    String name1 = "1.0.1 4C0";
    String name2 = "1.0.1 B 4BD";
    String name3 = "1.0.4.52A";
    String name4 = "1.0.2 Build S6B5";

    check(name1);
    check(name2);
    check(name3);
    check(name4);
}

private static void check(String name) {

    Pattern p = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)\\s+Build\\s+([SDT]\\w{3,4})");
    Matcher m = p.matcher(name);

    if (m.find()) {
        System.out.println("num1: " + m.group(1));
        System.out.println("num2: " + m.group(2));
        System.out.println("num3: " + m.group(3));
        System.out.println("build: " + m.group(4));
    } else {
        System.out.println("not found");
    }
}

使用Matcher.find()方法匹配部分测试字符串,然后使用Matcher.group()方法访问圆括号捕获的部分。

结果输出:

not found
not found
not found
num1: 1
num2: 0
num3: 2
build: S6B5

答案 1 :(得分:-1)

尝试这一个: (\ d {1})。(\ d {1})。(\ d {1})\ S(生成)\ S([SDT])([\ W \ d] {3,4})

(\ d)的。(\ d)。(\ d)* \ S(生成)\ S([SDT])([\ W \ d] {3,4})如果你有多个号码。

在你的问题是正则表达式的结束:"。{3,4}"。这意味着你接受3到4次任意角色。