Regexp không sử dụng \
để bảo vệ -
trong biểu thức dấu ngoặc . Bạn chỉ phải đặt -
là ký tự đầu tiên, ngay sau dấu ngoặc mở đầu:
IF REGEXP_LIKE('--,,::', '[\-,:]*')
...
=> ORA-12728: invalid range in regular expression
Nếu bạn tò mò, khi gặp [\-,:]
Oracle hiểu: "bất kỳ ký tự nào trong phạm vi từ \
thành ,
hoặc ký tự :
" . Lý do tại sao điều này tạo ra một ngoại lệ là \
dường như là sau ,
theo giá trị ASCII của chúng. Và Oracle không chấp nhận phạm vi có giá trị bắt đầu sau giá trị kết thúc.
Mặt khác:
IF REGEXP_LIKE('--,,::', '[-,:]*')
Hoạt động như mong đợi.
Như một lưu ý phụ,
[-,:]{0,1}
nghĩa là "không hoặc một lần xuất hiện -
hoặc ,
hoặc :
" có thể được viết [-,:]?
.