grep can only print either the whole line or the part which matched the single pattern (or the filename, I guess). However, since you're using a perl regex, you may want to try pcregrep, which has an additional optional parameter to the -o flag specifying the parenthetical group to show. As in
sauer@humpy:~$ echo ab12cd34ef | pcregrep -o1 '.*?(\d+).*?(\d+).*'
sauer@humpy:~$ echo ab12cd34ef | pcregrep -o2 '.*?(\d+).*?(\d+).*'
Unfortunately, you can not specify multiple -o options (probably because you'd then need a separator and things would get ugly). But if you're doing something simple, I suppose you could just repeat the pcregrep multiple times.
Also note that there can be no space between the "o" and match number in the command, since
-o with no argument behaves the same as regular grep.
Personally, I'd just use perl.
sauer@humpy:~$ echo ab12cd34ef | perl -plne 's/^.*?(\d+).*?(\d+).*$/$1:$2/'