Да
Точно так же, как +
означает, что один или несколько вы можете использовать {3,30}
для соответствия между 3 и 30
Например, [a-z]{3,30}
соответствует от 3 до 30 строчных буквы алфавита
Из документации класса Pattern
blockquote>X{n,m} X, at least n but not more than m times
В вашем случае соответствовало 3-30 букв по пробелам может быть выполнено с помощью:
([a-zA-Z]\s){3,30}
Если вам требуется пропустить пробел, если вы этого не сделаете, вы можете использовать: (2-29 раз букву + пробел, затем букву)
([a-zA-Z]\s){2,29}[a-zA-Z]
Если вы хотите, чтобы пробелы считались символами, вам нужно разделить это число на 2, чтобы получить
([a-zA-Z]\s){1,14}[a-zA-Z]
. Вы можете добавить
\s?
к последнему, если конечный пробел является необязательным , Все они были протестированы на RegexPlanet. Если вы хотите, чтобы вся строка в целом находилась между 3 и 30 символами, вы можете использовать lookaheads, добавляя
(?=^.{3,30}$)
в начале RegExp и удаление других ограничений по размеруВсе, что сказал, честно говоря, я бы, наверное, просто испытал свойство
String
.length
. Это более читаемо.