Определить диапазон цифр для уже определенного шаблона в регулярном выражении - PullRequest
0 голосов
/ 25 июня 2019

Как странно, я упускаю что-то, чего не могу найти в SO, которые уже дали ответы

Я создал регулярное выражение для соответствия этим требованиям:

  • Строка, соответствующая любому числуили эти буквенно-цифровые (_, -, пробел)
  • эта строка должна быть в диапазоне от 3 до 23 символов.

Я составил регулярное выражение для совпадения в качестве начала ^[a-zA-Z0-9_ -]*$ которые обычно соответствуют первому требованию

Теперь я изменяю * квантификатор соответствия, чтобы задать диапазон цифр, например d {3,23}, например, чтобы регулярное выражение выглядело как

^[a-zA-Z0-9_ -]\d{3,23}$

Ну, это не соответствует.Некоторая помощь была бы также полезна с некоторыми пояснениями

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Если вам нужно сопоставлять только строку, соответствующую первому требованию, когда в ней есть от 3 до 24 цифр, вам нужно посмотреть (?=(?:\D*\d){3,23}\D*$) в начале:

^(?=(?:\D*\d){3,23}\D*$)[a-zA-Z0-9_ -]*$

Поскольку в Java [a-zA-Z0-9_] можно записать как \w, смело используйте

^(?=(?:\D*\d){3,23}\D*$)[\w -]*$

И для сопоставления пробелов вы можете использовать \s вместо обычного пробела:

^(?=(?:\D*\d){3,23}\D*$)[\w\s-]*$

См. Демонстрационную версию regex (изменена, поскольку шаблон проверен на одной многострочной строке).

Детали

  • ^ - начало строки
  • (?=(?:\D*\d){3,23}\D*$) - должно быть от 3 до 23 последовательностей 0+ нецифровых символов, за которыми следует цифра, а затем любые 0+ нецифровых символов до конца строки
  • [\w\s-]* - 0+ букв, цифр, _, пробелов и - символов
  • $ - до конца строки.

Пример использования Java:

boolean valid  = s.matches("(?=(?:\\D*\\d){3,23}\\D*$)[\\w\\s-]*");

Обратите внимание, что String#matches требует полного совпадения строк, поэтому якоря являются избыточными.

1 голос
/ 25 июня 2019

Я предполагаю, что у вас может быть дополнительный \d в выражении, и, возможно, это сработает:

^[a-zA-Z0-9_ -]{3,23}$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...