#regex
#регулярное выражение
Вопрос:
У меня есть это регулярное выражение:
^[a-z0-9](?:[a-z0-9] )*$
Как я могу изменить это, чтобы строчная буква могла появляться в моей строке только при наличии числа и ТОЛЬКО после этого числа?
Это ожидаемые совпадения:
AA
AB
1a
1b
1A
1B
A1A
A1a
AB1
AB2
AB1a
AB2b
Это приведет к сбою:
Aa
Ab
a1
b1
Ab1
a1a
Ответ №1:
Я бы использовал положительный взгляд назад, чтобы утверждать, что цифра должна предшествовать любой строчной букве:
^(?:[A-Z0-9]|(?<=[0-9])[a-z])*$
ДЕМОНСТРАЦИЯ
Ответ №2:
В качестве альтернативы решением без поиска может быть сопоставление [0-9][a-z]
и повторение внешней группы 1 или более раз, чтобы предотвратить сопоставление пустой строки.
^(?:[A-Z0-9]|[0-9][a-z]) $
Объяснение
^
Начало строки(?:
Группа без захвата[A-Z0-9]
Соответствует либо Az, либо 0-9|
Или[0-9][a-z]
Сопоставьте 0-9, а затем a-z
)
Закройте group и повторите 1 раз, чтобы предотвратить сопоставление пустой строки$
Конец строки