Регулярное выражение для первых восьми букв и последнего номера

#regex #numbers #letter

#регулярное выражение #числа #буква

Вопрос:

Пожалуйста, помогите мне составить рабочее регулярное выражение. Условия:

  1. Может быть не более 9 символов (от 1 до 9).
  2. Первые восемь символов могут быть только прописными буквами.
  3. Последним символом может быть только цифра.

Примеры:

Не совпадают:

  • S3
  • FT5
  • FGTU7
  • ERTYUOP9
  • ERTGHYUKM

Соответствует:

  • E
  • ERT
  • RTYUKL
  • VBNDEFRW3

Я попытался использовать следующее:

 ^[A-Z]{1,8}d{0,1}$
 

но в этом случае пример FT5 соответствует, хотя и не должен.

Ответ №1:

Вы можете использовать регулярное выражение на основе чередования:

 ^(?:[A-Z]{1,8}|[A-Z]{8}d)$
 

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

Подробности регулярных выражений:

  • ^ : Начать
  • (?: : Запустить группу без захвата
    • [A-Z]{1,8} : Сопоставьте от 1 до 8 прописных букв
    • | : ИЛИ
    • [A-Z]{8}d : Сопоставьте 8 заглавных букв, за которыми следует цифра.
  • ) : Завершить группу без захвата
  • $ : End

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

1. Отлично. Большое спасибо!

Ответ №2:

Вы также можете исключить первые 7 символов верхнего регистра, за которыми следует цифра, используя отрицательный указатель:

 ^(?![A-Z]{1,7}d)[A-Z]{1,8}d?$
 
  • ^ Начало строки
  • (?![A-Z]{1,7}d) Отрицательный прогноз для утверждения не 1-7 символов верхнего регистра и цифры
  • [A-Z]{1,8} Сопоставьте 1-8 раз символ верхнего регистра
  • d? Сопоставьте необязательную цифру
  • $ Конец строки

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

Ответ №3:

С помощью механизма регулярных выражений, поддерживающего притяжательные кванторы, вы можете написать:

 ^[A-Z]{1,7} (?:[A-Z]d?)?$
 

ДЕМОНСТРАЦИЯ

Буква в необязательной группе может быть успешной только тогда, когда квантификатор in [A-Z]{1,7} достигает максимума и когда остается буква. Буква в группе может быть только 8-м символом.

Для механизма регулярных выражений .net (который не поддерживает притяжательные кванторы) вы можете написать этот шаблон, используя атомарную группу:

 ^(?>[A-Z]{1,7})(?:[A-Z]d?)?$