(defn re-quote [s]
(let [special (set ".?*+^$[]\\(){}|")
escfn #(if (special %) (str \\ %) %)]
(apply str (map escfn s))))
(let [string "ab(c\\Sdef[A-Z]gh)i|kl^m"
quoted (re-quote string)
matches (re-matches (re-pattern quoted) string)]
(println "string:" string)
(println "quoted:" quoted)
(println "mathes:" matches))
KGRlZm4gcmUtcXVvdGUgW3NdCiAgKGxldCBbc3BlY2lhbCAoc2V0ICIuPyorXiRbXVxcKCl7fXwiKQogICAgICAgIGVzY2ZuICMoaWYgKHNwZWNpYWwgJSkgKHN0ciBcXCAlKSAlKV0KICAgIChhcHBseSBzdHIgKG1hcCBlc2NmbiBzKSkpKQoKCihsZXQgW3N0cmluZyAiYWIoY1xcU2RlZltBLVpdZ2gpaXxrbF5tIgogICAgICBxdW90ZWQgKHJlLXF1b3RlIHN0cmluZykKICAgICAgbWF0Y2hlcyAocmUtbWF0Y2hlcyAocmUtcGF0dGVybiBxdW90ZWQpIHN0cmluZyldCiAgKHByaW50bG4gInN0cmluZzoiIHN0cmluZykKICAocHJpbnRsbiAicXVvdGVkOiIgcXVvdGVkKQogIChwcmludGxuICJtYXRoZXM6IiBtYXRjaGVzKSk=