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

#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 раз, чтобы предотвратить сопоставление пустой строки
  • $ Конец строки

Демонстрация регулярных выражений