Regexp brug ikke \ for at beskytte - i et parentesudtryk . Du skal kun indtaste - som det første tegn lige efter den indledende parentes:
IF REGEXP_LIKE('--,,::', '[\-,:]*')
...
=> ORA-12728: invalid range in regular expression
Hvis du er nysgerrig, når du støder på [\-,:] Oracle forstår:"ethvert tegn i området fra \ til , eller tegnet : " . Grunden til at dette rejser en undtagelse er \ ser ud til at være efter , i henhold til deres ASCII-værdi. Og Oracle accepterer ikke rækkevidde have en startværdi efter den afsluttende.
På den anden side:
IF REGEXP_LIKE('--,,::', '[-,:]*')
Virker som forventet.
Som en sidebemærkning,
[-,:]{0,1} betyder "nul eller én forekomst af - eller , eller : " kunne skrives [-,:]? .