RegEx:仅允许值一次

时间:2012-01-17 20:40:04

标签: java regex

我有一串数字,每个数字在字符串中可以显示为零或一次。我可以通过RegEx验证吗?我可以做一些事情,比如检查字符数组是否重复,但更喜欢坚持我的常规验证例程。

以下内容应返回“匹配”

String thisItemText = "12679";
if(!thisItemText.matches("[1245679]*")) {
    System.out.println("No Match");
} else {
    System.out.println("Match");
}

以下内容应返回“No Match”(注意双“2”)

String thisItemText = "122679";
if(!thisItemText.matches("[1245679]*")) {
    System.out.println("No Match");
} else {
    System.out.println("Match");
}

5 个答案:

答案 0 :(得分:7)

如果有重复的数字,正则表达式(\d).*\1将匹配。

答案 1 :(得分:2)

以下是您需要的正则表达式:

(?:([1245679])(?!\\1))+

以下内容返回“匹配”

String thisItemText = "12679";
if(!thisItemText.matches("(?:([1245679])(?!\\1))+")) {
    System.out.println("No Match");
} else {
    System.out.println("Match");
}

以下内容返回“No Match”

String thisItemText = "122679";
if(!thisItemText.matches("(?:([1245679])(?!\\1))+")) {
    System.out.println("No Match");
} else {
    System.out.println("Match");
}

干杯

答案 2 :(得分:1)

有没有regexp的解决方案,假设char set是ASCII

public static boolean isUniqueChars(String str)
{
    boolean[] char_set = new boolean[256];
    for (int i = 0; i < str.length(); i++)
    {
        int val = str.charAt(i);
        if (char_set[val]) return false;
        char_set[val] = true;
    }
    return true;
}

答案 3 :(得分:1)

尝试这种模式:

"(?<=([0-9]))(?:(?!\\1).)*\\1(?!\\1)"

将匹配具有任何重复数字的字符串。因此,如果它不匹配则它没有任何重复数字。

答案 4 :(得分:-1)

如果您正在寻找完全那个数字序列,那么您必须使用(1245679)*作为正则表达式,如果没有,您正在寻找的内容无法使用正则表达式完成,并且您有使用自定义解析器。