#java #regex
Вопрос:
регулярное выражение с буквенно-цифровыми символами со всеми специальными символами, кроме % — в словах.
это 3 слова, разделенных дефисом. первое и второе слово могут допускать все, кроме % — Третье слово состоит только из цифр
первое слово
- не быть пустым (т. е. не простым пробелом). но он может допускать промежутки между ними.
- не может содержать % и —
- длина должна быть от 1 до 10
второе слово
- не быть пустым (т. е. не простым пробелом). но это может позволить промежутки между
- не может содержать % и —
- длина должна быть от 1 до 12
третье слово
- не быть пустым (т. е. не простым пробелом)
- разрешены только цифры
- длина должна быть от 4 до 9
пытаюсь таким образом (как регулярное выражение), но это тоже позволяет%.
[[^%-s]]{1,10}[-]{1}[[^%-s]]{1,12}[-]{1}[d]{4,9}
разрешенные строки:
"1sAS-c$AS-01238"
"t t-c:t-012345678"
"t$t-c 2:t-012345678"
Недопустимые строки:
"1sA%S-c$AS-01238" (because this contains % in the first word)
" -c:t-01235678" (because this contains only space in the first word)
"t$t- -01234578" (because this contains only space in the 2nd word)
"t-$t-check-012378" (because this contains more hypens)
пример моей входной строки (значение элемента) для приведенного выше шаблона должен давать значение false: test%t1z
Pattern pattern = Pattern.compile(regexStr);
Matcher matcher = pattern.matcher(itemValue);
if(matcher.matches()){
flag = true;
}
Ответ №1:
Вы можете использовать
String regexStr = "(?!\s -)[^%-]{1,10}-(?!\s -)[^%-]{1,12}-\d{4,9}";
Смотрите демонстрацию регулярных выражений.
Подробные сведения:
A
— начало строки (неявно, когда используется регулярноеmatches()
выражение )(?!s -)
— сразу справа не должно быть одного или нескольких пробелов, а затем-
символа[^%-]{1,10}
— от одного до десяти символов, отличных от%
и-
([^%n-]
не позволяет сопоставлять новую строку в демо)-
— дефис(?!s -)
— сразу справа не должно быть одного или нескольких пробелов, а затем-
символа[^%-]{1,12}
— от одного до двенадцати символов, кроме%
и-
-
— дефисd{4,9}
— от четырех до девяти цифрz
— конец строки (неявный, когда используется регулярноеmatches()
выражение ).