Ваша строка будет иметь префикс , за которым следует a , за которым следует суффикс .
Оба префикс и суффикс могут иметь нулевую длину. Если нет, они должны быть как одинаковыми, так и неравномерными. Это означает, что у вас есть два основных случая.
EVENPREFIX a EVENSUFFIX | UNEVENPREFIX a UNEVENSUFFIX
Попробуйте это ( не полностью и неправильно ):
([bc][bc])*a([bc][bc])*|([bc][bc][bc])*a([bc][bc][bc])*
По-прежнему отсутствует один неравномерный случай: один [bc]
:
(([bc][bc])*a([bc][bc])*)|([bc]([bc][bc])*a[bc]([bc][bc])*)
Согласно http://www.fileformat.info/tool/regex.htm, это соответствует
Полагаю, это соответствует и остальным ...
Левая сторона гарантирует четные (или пустые) последовательности b
или c
.
Правая сторона - это либо b
, либо c
, за которым следует кратное двум (так что оно остается неравномерным).
Коби придумал это уточнение выше:
([bc][bc])*(a|[bc]a[bc])([bc][bc])*
Как это работает?
Первая группа гарантированно будет четной. Вторая группа гарантированно будет неравномерной с одним a
внутри. Третья группа гарантированно будет четной. Таким образом, целое гарантировано будет неравномерным.