let quote s =
let len = String.length s in
let buf = String.create (len lsl 1) in
let pos = ref 0 in
for i = 0 to len - 1 do
match String.unsafe_get s i with
| '\\' | '^' | '$' | '.' | '[' | '|'
| '(' | ')' | '?' | '*' | '+' | '{' as c ->
String.unsafe_set buf !pos '\\';
incr pos;
String.unsafe_set buf !pos c; incr pos
| c -> String.unsafe_set buf !pos c; incr pos
done;
string_unsafe_sub buf 0 !pos