【问题标题】:Regular expression in java always return truejava中的正则表达式总是返回true
【发布时间】:2017-03-30 07:24:49
【问题描述】:

你能帮我在 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

等等

【问题讨论】:

标签: java android regex


【解决方案1】:

试试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

【讨论】:

    【解决方案2】:

    试试这个: (\d{1}).(\d{1}).(\d{1})\s(Build)\s([SDT])([\w\d]{3,4})

    (\d).(\d).(\d)*\s(Build)\s([SDT])([\w\d]{3,4})如果你可以有多个号码。

    在您的问题中,正则表达式的结尾是:“.{3,4}”。这意味着您接受任何字符 3 到 4 次。

    【讨论】:

    • 我不同意这是问题所在。它应该已经与缺少的“构建”不匹配。
    • 他的正则表达式中没有“Build”?这是他的正则表达式:if (name.matches("\\d+\\.\\d+\\.\\d+\\s+Build\\s[SDT].{3,4}"));
    • 测试数据中没有“Build”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2012-05-31
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多