Consider:
regexp_replace(mycol,'0+','-', 1, 1)
Rationale: the fifth parameter, when greater than 0, specifies wich occurence should be replaced; when it is set to 0, all occurences are replaced.
Other notable changes to your original regex:
- parentheses define capturing group; since you don't need to capture, there are superfluous
- brackets define a character class; not needed since you are matching on a single character
Demo on DB Fiddle:
with a as (
select '30000001174934177910' mycol from dual
union all select '30000000174934177910' from dual
union all select '301873130520' from dual
union all select '300173130520' from dual
)
select mycol input, regexp_replace(mycol,'0+','-', 1, 1) output from a
INPUT | OUTPUT
:------------------- | :--------------
30000001174934177910 | 3-1174934177910
30000000174934177910 | 3-174934177910
301873130520 | 3-1873130520
300173130520 | 3-173130520