
now with asterisk: (see the highlighted part in code below)

now asterisk is to match 0 or more occurrences - so I'm assuming the dashes between the characters (i.e. -A-n-d-) signifies a 0 occurrence. Am I correct in assuming this?
Also why are *&% and $@($*@' both replaced with double in this case compared to 1 dash when we use a plus operator. Is this another 0 occurrence case?
Here's the code if anyone needs it
SELECT REGEXP_REPLACE('And then he said *&% so I replied with $@($*@',
'[!@#$%^&*()]*','-') PRIME_TIME
FROM DUAL;