регулярное выражение (для 3 слов) с буквенно-цифровыми символами со всеми специальными символами, кроме % —

#java #regex

Вопрос:

регулярное выражение с буквенно-цифровыми символами со всеми специальными символами, кроме % — в словах.

это 3 слова, разделенных дефисом. первое и второе слово могут допускать все, кроме % — Третье слово состоит только из цифр

первое слово

  1. не быть пустым (т. е. не простым пробелом). но он может допускать промежутки между ними.
  2. не может содержать % и —
  3. длина должна быть от 1 до 10

второе слово

  1. не быть пустым (т. е. не простым пробелом). но это может позволить промежутки между
  2. не может содержать % и —
  3. длина должна быть от 1 до 12

третье слово

  1. не быть пустым (т. е. не простым пробелом)
  2. разрешены только цифры
  3. длина должна быть от 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() выражение ).