Боюсь, что я не верю, что ваше регулярное выражение, как написано, правильно. Рассмотрим строку:
aba
У нас есть пара вариантов для матчей, но тот факт, что это нечетная длина, означает, что мы должны соответствовать одиночному a спереди, поэтому:
(a)(ba)
Но, к сожалению, ваша вторая основная группа не может соответствовать (ба).
При работе с таким ограничением я обнаружил, что легче начать с основного ограничения и перейти оттуда. В этом случае ваше ограничение "нечетное", поэтому начните с
a(aa)*
, чтобы вызвать нечетное число a
и перейти оттуда. :)