Попробуйте это:
^(bA+|A+b?)$
Это позволяет b
в начале, а затем, по крайней мере, один A
или несколько A
с в начале и, необязательно, b
в конце. Он охватывает все возможности и немного быстрее принятого ответа в случае, если он не совпадает, поскольку необходимо протестировать только один из двух вариантов (при условии, что A
не может начинаться с b
).
Просто чтобы отличаться от других ответов здесь, если выражение A довольно сложное, но b простое, то вы можете сделать это, используя отрицательный взгляд, чтобы избежать повторения всего выражения для A
в вашем регулярном выражении :
^(b(?!.*b$))?A+b?$
Второй может быть более читабельным, если ваш A сложный, но если производительность является проблемой, я бы порекомендовал первый метод.