Не уверен, что это ответ на ваш вопрос, но: вам нужно отправить регулярное выражение? или будет делать FSM?
В любом случае, может быть полезно сначала нарисовать FSM, и я думаю , что это правильный DFA:
FSM http://img254.imageshack.us/img254/5324/fsm.png
Если это так, то при создании вашего регулярного выражения (которое, помните, имеет синтаксис, отличный от программирования "regex"):
0*
, чтобы указать «0 столько раз, сколько вы хотите». Это имеет смысл, так как 0 в вашей строке не меняет состояние машины. (Смотрите, в FSM 0 просто возвращается к себе)
Вам нужно будет учитывать различные комбинации "112" или "22" и т. Д., Пока вы не наберете по крайней мере 4 в вашей сумме.
Если ваша сумма больше 3 и даже, тогда (0 | 2) * удержит вас в конечном состоянии. В противном случае (сумма> 3 и нечетное) вам понадобится что-то вроде 1 (0 | 2) *, чтобы перевести вас в принимающее состояние.
(не знаю, помогает ли это, или это правильно - но это может быть начало!)