Is there an existing PL / SQL method that takes a string and returns the same string, but with backslashes preceding any regular expression characters?
Try the following:
result := REGEXP_REPLACE(subject, '([$^[()+*?{\|])', '\\\1', 1, 0, 'c');