#regex #numbers #letter
#регулярное выражение #числа #буква
Вопрос:
Пожалуйста, помогите мне составить рабочее регулярное выражение. Условия:
- Может быть не более
9
символов (от 1 до 9). - Первые восемь символов могут быть только прописными буквами.
- Последним символом может быть только цифра.
Примеры:
Не совпадают:
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?)?$