Regexp använder inte \
för att skydda -
i ett parentesuttryck . Du behöver bara ange -
som det första tecknet, precis efter den inledande parentesen:
IF REGEXP_LIKE('--,,::', '[\-,:]*')
...
=> ORA-12728: invalid range in regular expression
Om du är nyfiken, när du stöter på [\-,:]
Oracle förstår:"alla tecken i intervallet från \
till ,
eller tecknet :
" . Anledningen till att detta skapar ett undantag är \
verkar vara efter ,
enligt deras ASCII-värde. Och Oracle accepterar inte räckvidd har ett startvärde efter det sista.
Å andra sidan:
IF REGEXP_LIKE('--,,::', '[-,:]*')
Fungerar som förväntat.
Som en sidoanteckning,
[-,:]{0,1}
betyder "noll eller en förekomst av -
eller ,
eller :
" kan skrivas [-,:]?
.