Java正则表达式,用于验证和提取某些值

时间:2014-10-17 00:22:43

标签: java regex

我想在Java中提取以下字符串的所有三个部分

MS-1990-10
  1. 第一部分应始终为2个字母(A-Z
  2. 第二部分应该总是一年
  3. 第三部分应始终为数字
  4. 有谁知道如何使用Java的正则表达式做到这一点?

4 个答案:

答案 0 :(得分:2)

您可以使用java的模式匹配器和组语法来执行此操作:

    Pattern datePatt = Pattern.compile("([A-Z]{2})-(\\d{4})-(\\d{2})");
    Matcher m = datePatt.matcher("MS-1990-10");
    if (m.matches()) {
        String g1 = m.group(1);
        String g2 = m.group(2);
        String g3 = m.group(3);
    }

答案 1 :(得分:0)

这是一种使用正则表达式获取所有3个部分的方法:

public class Test {

    public static void main(String... args) {

        Pattern p = Pattern.compile("([A-Z]{2})-(\\d{4})-(\\d{2})");
        Matcher m = p.matcher("MS-1990-10");
        m.matches();
        for (int i = 1; i <= m.groupCount(); i++)
            System.out.println(m.group(i));
    }
}

答案 2 :(得分:0)

使用Matcher的组,以便获得实际匹配的模式。 在Matcher中,将捕获括号内的匹配项,并可通过group()方法检索。要在不捕获匹配项的情况下使用括号,请使用非捕获括号(?:xxx)

另见Pattern

public static void main(String[] args) throws Exception {
    String[] lines = { "MS-1990-10", "AA-999-12332", "ZZ-001-000" };

    for (String str : lines) {
        System.out.println(Arrays.toString(parse(str)));
    }
}

private static String[] parse(String str) {
    String regex = "";
    regex = regex + "([A-Z]{2})";
    regex = regex + "[-]";
    // regex = regex + "([^0][0-9]+)"; // any year, no leading zero
    regex = regex + "([12]{1}[0-9]{3})"; // 1000 - 2999
    regex = regex + "[-]";
    regex = regex + "([0-9]+)";

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);
    if (!matcher.matches()) {
        return null;
    }

    String[] tokens = new String[3];
    tokens[0] = matcher.group(1);
    tokens[1] = matcher.group(2);
    tokens[2] = matcher.group(3);
    return tokens;
}

答案 3 :(得分:0)

    String rule = "^[A-Z]{2}-[1-9][0-9]{3}-[0-9]{2}";
    Pattern pattern = Pattern.compile(rule);
    Matcher matcher = pattern.matcher(s);

常规比赛年份在1000~9999之间,你可以根据自己的需要进行更新。