在Java中使用正则表达式

时间:2010-05-17 13:36:54

标签: java regex

我需要检查一个字符串,该字符串应该只包含ABCDEFG字符,任何顺序且只有7个字符。请告诉我使用正则表达式的正确方法。

正如我正在使用

String abs = "ABPID";
if(!Pattern.matches("[[ABCDEFG]", abs))
System.out.println("Error");

我正在使用以下代码,当我使用String abcdefg时它可以工作但是对于其他情况它失败了。请帮帮我。

2 个答案:

答案 0 :(得分:6)

正好7个字符

"^[ABCDEFG]{7}$"

1到7个字符

"^[ABCDEFG]{1,7}$"

答案 1 :(得分:4)

要查看字符串是否为ABCDEFG的排列,使用否定前瞻和捕获组很容易执行重复:

^(?!.*(.).*\1)[A-G]{7}$

如果在Java中使用String.matches(),则不需要锚点。这是一个测试工具:

    String[] tests = {
        "ABCDEFG", // true
        "GBADFEC", // true
        "ABCADFG", // false
    };
    for (String test : tests) {
        System.out.format("%s %b%n", test,
            test.matches("(?!.*(.).*\\1)[A-G]{7}")
        );
    }

基本上,[A-G]{7},还有(?!.*(.).*\1)。也就是说,不会重复任何角色。

这是断言的测试工具:

    String[] tests = {
        "abcdeb", // "(b)"
        "abcdefg", // "abcdefg"
        "aba", // "(a)"
        "abcdefgxxxhijyyy" // "(y)"
    };
    for (String test : tests) {
        System.out.println(test.replaceAll("(?=.*(.).*\\1).*", "($1)"));
    }

它的工作方式是尝试匹配.*(.).*\1,即两者之间的.*匹配,再次显示(.)的已捕获字符\1

另见