Regular Expression Difficulty
This works fine:

select regexp_substr(':123:456:', '(\d+):', 1, 2, 'i', 1) from dual;


I think yours fails because the opening and closing colons won't get matched by both occurrences (because the first match is greedy).