#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 символов, начинающейся с буквенно-цифрового символа, за которым следует один пробел и более буквенно-цифровых символов. Обратите внимание, что строка должна заканчиваться буквенно-цифровым символом, а не пробелом.