Вам нужен preg_match_all и рекурсивное регулярное выражение для обработки вложенного паретеза
$ re = '~ ([^. ()] * ((([^ ()] + | (? 2)) *))) | ([^. ()] +) ~ x ';
$re = '~( [^.()]* ( \( ( [^()]+ | (?2) )* \) ) ) | ( [^.()]+ )~x';
тест
$value = "code1.code2.code3.code4(code5.code6(arg1.arg2, arg3), code7.code8).xx.yy(more.and(more.and)more).zz";
preg_match_all($re, $value, $m, PREG_PATTERN_ORDER);
print_r($m[0]);
результат
[0] => code1
[1] => code2
[2] => code3
[3] => code4(code5.code6(arg1.arg2, arg3), code7.code8)
[4] => xx
[5] => yy(more.and(more.and)more)
[6] => zz