let mkregexp ?(strict:bool=true) pl gl sl : Str.regexp =
let prefix = String.big (^) pl in
let groups = String.big (^) (List.map (fun x->("\\(" ^ x ^ "\\)")) gl) in
let suffix = String.big (^) sl in
let expr = prefix ^ groups ^ suffix in
let expr = if strict then ("^" ^ expr ^ "$") else expr in
Str.regexp expr