регулярное выражение для запрета пробелов при запуске

#java #regex

#java #регулярное выражение

Вопрос:

Регулярное выражение, позволяющее использовать только алфавиты и цифры и пробелы только между алфавитами с максимальным размером 20.

([a-zA-Z0-9] ([\s][a-zA-Z0-9] )*){0,20} .

Это не допускает пробелов при запуске, но не проверяет условие максимального размера. Как я могу изменить это регулярное выражение?

Комментарии:

1. Было бы неплохо привести несколько примеров того, чему оно должно соответствовать, а чему не должно соответствовать.

Ответ №1:

Вы указываете 20 повторений всего шаблона. Я предполагаю, что вы, вероятно, имеете в виду что-то вроде

 [a-zA-Z0-9][\sa-zA-Z0-9]{0,19}
  

Если должен быть разрешен пустой ввод, оберните все это (...)? .

Комментарии:

1. Будет ли это регулярное выражение работать для разрешения пустой строки [a-zA-Z0-9]{0,1}[\ sa-zA-Z0-9]{0,19}

2. Нет, то есть это позволит вводить пустой ввод, но также снимает ограничение на то, что первый символ должен быть непустым. Как я уже объяснял в ответе, способ сделать это таков ([a-zA-Z0-9][\sa-zA-Z0-9]{0,19})? . Знак вопроса является более компактным и идиоматичным wsy для записи {0,1} .

Ответ №2:

Всевозможные способы написать это, и поскольку вы используете Java, почему бы не использовать «функцию» регулярных выражений Java? : D

 String regexString = "(?<!\s )[\w\samp;amp;[^_]]{0,20}";
  

В разбивке говорится:

 (?<!\s )  # not following one or more whitespace characters,
[          # match one of the following:
  \w      # word character (`a-z`, `A-Z`, `0-9`, and `_`)
  \s      # whitespace characters
  amp;amp;[^_]   # EXCEPT FOR `_`
]          # 
{0,20}     # between 0 and 20 times
  

Оно будет соответствовать a-z , A-Z , 0-9 , и пробелам, хотя в противном случае w включал бы символы подчеркивания, дополнительная часть там говорит НЕ о подчеркивании — я думаю, что это уникально для Java … в любом случае, это было весело!

Ответ №3:

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

 boolean foundMatch = subjectString.matches("(?i)^(?=.{1,20}$)[a-z0-9] (?:\s[a-z0-9] )*$");
  

будет соответствовать строке от 1 до 20 символов, начинающейся с буквенно-цифрового символа, за которым следует один пробел и более буквенно-цифровых символов. Обратите внимание, что строка должна заканчиваться буквенно-цифровым символом, а не пробелом.