Требуется регулярное выражение: он должен содержать только [алфавиты] или [алфавиты и цифры], но не [только Didgits] и не оператор или специальный символ в Java - PullRequest
0 голосов
/ 11 октября 2010

Действительный: abc abc11

Неверно: 11 a-b a&&b a << b a&b a->b

Ответы [ 4 ]

2 голосов
/ 11 октября 2010

Одно регулярное выражение:

/^[a-zA-Z\d]*[a-zA-Z]+[a-zA-Z\d]*^/
1 голос
/ 11 октября 2010

Это регулярное выражение должно выполнять эту работу: /^[a-zA-Z\d]*[a-zA-Z][a-zA-Z\d]*^/

Имейте в виду, это регулярное выражение потенциально может значительно откатиться назад;это будет O(N^2) в худшем случае.Если сделать первое повторение ленивым, а не нетерпеливым, то регулярное выражение будет быстрее ... если оно будет соответствовать.Способ ускорить случай отсутствия совпадений - использовать два регулярных выражения.

Или, что еще лучше, вообще не используйте регулярные выражения и сопоставьте код в простом Java:

public boolean matchSymbol (String input) {
    boolean seenLetter = false;
    final int len = input.length();
    for (int i = 0; i < len; i++) {
        char ch = input.charAt(i);
        if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') {
            seenLetter = true;
        } else if (ch < '0' || ch > '9') {
            return false;
        }
    }
    return seenLetter;
}

Для строки из N символов это успешно выполняется в итерациях цикла N или не выполняется в(обычно) менее N итераций.

1 голос
/ 11 октября 2010

Вам нужно два регулярных выражения. Тот, который проверяет, это только буквенно-цифровой /[a-zA-Z0-9]+/, а тот, который проверяет, что это не просто цифры /^[^0-9]+$/ Проверяйте только второй, если первый проходит.

0 голосов
/ 06 ноября 2010
"^[0-9]*+[A-Za-z][A-Za-z0-9]*+$"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...