Редовните изрази не използват \
за защита на -
в израз в скоби . Трябва само да поставите -
като първи знак, точно след отварящата скоба:
IF REGEXP_LIKE('--,,::', '[\-,:]*')
...
=> ORA-12728: invalid range in regular expression
Ако сте любопитни, когато срещнете [\-,:]
Oracle разбира:"всеки знак в диапазона от \
до ,
или знакът :
" . Причината, поради която това предизвиква изключение, е \
изглежда е след ,
според тяхната ASCII стойност. И Oracle не приема обхват с начална стойност след крайната.
От друга страна:
IF REGEXP_LIKE('--,,::', '[-,:]*')
Работи според очакванията.
Като странична бележка,
[-,:]{0,1}
което означава "нула или едно срещане на -
или ,
или :
" може да бъде написано [-,:]?
.