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 [-,:]? .