Один из способов - использовать положительный прогноз (?=
для проверки, по крайней мере, вхождения AZ и di git 0-9
, чтобы сопоставить вхождения в -
в прогнозе чтобы найти и то, и другое, вы можете добавить его в класс символов.
При сопоставлении вы начинаете сопоставлять символы A-Z0-9 и повторяете группу, начинающуюся с -
, чтобы не было последовательных вхождений * 1008. * а не в начале или в конце.
\b(?=[A-Z0-9-]*[A-Z])(?=[A-Z0-9-]*[0-9])[A-Z0-9]+(?:-[A-Z0-9]+)+\b
\b
Граница слова (?=[A-Z0-9-]*[A-Z])
Установить символ AZ (?=[A-Z0-9-]*[0-9])
Подтвердить di git 0-9 [A-Z0-9]+
Совпадение 1+ вхождений A-Z0-9 (?:-[A-Z0-9]+)+
Повторить сопоставление 1+ вхождений A-Z0-9 с -
с добавлением \b
Граница слова
Regex demo
Примечание , что [A-z]
соответствует больше чем [A-Za-z]
Ограничение класса символов 4-8 случаями:
\b(?=[A-Z0-9-]*[A-Z])(?=[A-Z0-9-]*[0-9])[A-Z0-9]{4,8}(?:-[A-Z0-9]{4,8})+\b