Если вам нужно использовать регулярные выражения, вы можете использовать что-то вроде этого:
^(?:B*(?:AB*A)*B*)*$
Демо .
Я уверен это не самый эффективный способ, но, похоже, он справляется со своей задачей.
В основном это будет соответствовать двум A
символам с нулем или более B
символов между ними, и все это повторяется с нуля или более раз. Это гарантирует, что число A
будет четным. Тогда у нас есть ноль или более B
символов в начале и конце, если строка начинается с или заканчивается B
. И затем все повторяется ноль или более раз.
Если вы хотите отклонить пустые строки (и предполагая, что ваше регулярное выражение поддерживает Lookaheads), вы можете добавить простой Lookahead, который ищет один символ в начале выкройки:
^(?=.)(?:B*(?:AB*A)*B*)*$