Непросто сопоставить строки с помощью регулярного выражения. Шаблон [^A]{4}
не означает , а не 4 появления A . Это означает 4 вхождения 'not A' .
Я думаю, что должно работать что-то вроде этого:
[A-Za-z0-9]{2,3} |
[B-Za-z0-9][A-Za-z0-9]{3} |
[A-Za-z0-9][B-Za-z0-9][A-Za-z0-9]{2} |
[A-Za-z0-9]{2}[B-Za-z0-9][A-Za-z0-9] |
[A-Za-z0-9]{3}[B-Za-z0-9]
, что означает,
- 2-символьный или 3-символьный алфавитно-цифровой код c строка или
- 4-символьный алфавитно-цифровой код c строка, в которой первый символ не является 'A' или
- 4-символьный алфавитно-цифровой код c строка со вторым символом не 'A' или
- строка из 4 буквенно-цифровых символов c строка с 3-м символом, а не 'A' или
- строка из 4 букв и цифр c строка с 4-й символ, а не «A»
Может быть более простое решение, но я не могу его придумать.