RegEx: разрешить значение только один раз - PullRequest
3 голосов
/ 18 января 2012

У меня есть строка чисел, и каждое число может появиться в нуле или один раз в строке.Могу ли я подтвердить это через RegEx?Я мог бы сделать что-то вроде проверки массива символов на наличие дубликатов, но предпочел бы придерживаться моей обычной процедуры проверки.

Следующее должно возвращать "Match"

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 ]

7 голосов
/ 18 января 2012

Регулярное выражение (\d).*\1 будет соответствовать, если есть повторяющаяся цифра.

2 голосов
/ 18 января 2012

Вот необходимое вам регулярное выражение:

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

Следующее возвращает «Match»

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");
}

Приветствия

1 голос
/ 18 января 2012

Попробуйте этот шаблон:

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

будет соответствовать строке с повторяющимися цифрами. Поэтому, если он не совпадает, то он не имеет повторяющихся цифр.

1 голос
/ 18 января 2012

Существует решение без регулярных выражений, предположим, что набор символов 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;
}
0 голосов
/ 18 января 2012

Вы должны использовать (1245679)* в качестве регулярного выражения, если вы ищете точно , что последовательность чисел, если нет, то, что вы ищете, не может быть выполнено с помощью регулярных выражений, и вы должны использоватьпользовательский парсер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...