Ответ не верен, но я слишком долго его писал, так что мне жалко его удалять :DВот так можно получить
1)
AAA(CCC(C1_1);A1_1)
;
2)
BBB(B1_1; B1_2)
;
3)
DDD(D1_1)
.
Я не уверен, но, насколько мне известно, так как
CCC(C1_1)
уже находится в найденном (внутри
AAA(CCC(C1_1);A1_1)
), второй раз его вы не найдёте, для этого придётся повторять парсинг для группы 2 каждого включения.
Также в примере вы можете увидеть, что тройное вложение под это правило уже не подойдёт. Вы можете расширить регулярку для отлавливания любого конечного количества вложений, но лично я бы не советовал их использовать для подобных задач. Отмечу, что в регулярках я шарю не очень, так что возможно мой совет некорректен, в таком случае прошу прощения.
UPD: Изменил пример. Предыдущая регулярка искала AAA(bar; BBB(); foo) но путалась с AAA(BBB(); foo; DDD(); bar).