sig
  exception BadPattern of string * int
  exception BadUTF8
  exception BadUTF8Offset
  exception MatchLimit
  exception InternalError of string
  exception Backtrack
  type icflag
  and irflag
  and cflag =
    [ `ANCHORED
    | `CASELESS
    | `DOLLAR_ENDONLY
    | `DOTALL
    | `EXTENDED
    | `EXTRA
    | `MULTILINE
    | `NO_AUTO_CAPTURE
    | `NO_UTF8_CHECK
    | `UNGREEDY
    | `UTF8 ]
  val cflags : Pcre.cflag list -> Pcre.icflag
  val cflag_list : Pcre.icflag -> Pcre.cflag list
  type rflag = [ `ANCHORED | `NOTBOL | `NOTEMPTY | `NOTEOL ]
  val rflags : Pcre.rflag list -> Pcre.irflag
  val rflag_list : Pcre.irflag -> Pcre.rflag list
  val version : string
  val config_utf8 : bool
  val config_newline : char
  val config_link_size : int
  val config_match_limit : int
  val config_stackrecurse : bool
  type firstbyte_info = [ `ANCHORED | `Char of char | `Start_only ]
  and study_stat = [ `Not_studied | `Optimal | `Studied ]
  and regexp
  external options : Pcre.regexp -> Pcre.icflag = "pcre_options_stub"
  external size : Pcre.regexp -> int = "pcre_size_stub"
  external studysize : Pcre.regexp -> int = "pcre_studysize_stub"
  external capturecount : Pcre.regexp -> int = "pcre_capturecount_stub"
  external backrefmax : Pcre.regexp -> int = "pcre_backrefmax_stub"
  external namecount : Pcre.regexp -> int = "pcre_namecount_stub"
  external nameentrysize : Pcre.regexp -> int = "pcre_nameentrysize_stub"
  external firstbyte : Pcre.regexp -> Pcre.firstbyte_info
    = "pcre_firstbyte_stub"
  external firsttable : Pcre.regexp -> string option = "pcre_firsttable_stub"
  external lastliteral : Pcre.regexp -> char option = "pcre_lastliteral_stub"
  external study_stat : Pcre.regexp -> Pcre.study_stat
    = "pcre_study_stat_stub" "noalloc"
  val get_stringnumber : Pcre.regexp -> string -> int
  external get_match_limit : Pcre.regexp -> int option
    = "pcre_get_match_limit_stub"
  type chtables
  external maketables : unit -> Pcre.chtables = "pcre_maketables_stub"
  val regexp :
    ?study:bool ->
    ?limit:int ->
    ?iflags:Pcre.icflag ->
    ?flags:Pcre.cflag list ->
    ?chtables:Pcre.chtables -> string -> Pcre.regexp
  val quote : string -> string
  type substrings
  val get_subject : Pcre.substrings -> string
  val num_of_subs : Pcre.substrings -> int
  val get_substring : Pcre.substrings -> int -> string
  val get_substring_ofs : Pcre.substrings -> int -> int * int
  val get_substrings : ?full_match:bool -> Pcre.substrings -> string array
  val get_named_substring :
    Pcre.regexp -> string -> Pcre.substrings -> string
  val get_named_substring_ofs :
    Pcre.regexp -> string -> Pcre.substrings -> int * int
  type callout = Pcre.substrings -> int -> int -> int -> int -> int -> unit
  val pcre_exec :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string -> ?pos:int -> ?callout:Pcre.callout -> string -> int array
  val exec :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int -> ?callout:Pcre.callout -> string -> Pcre.substrings
  val exec_all :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int -> ?callout:Pcre.callout -> string -> Pcre.substrings array
  val next_match :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int -> ?callout:Pcre.callout -> Pcre.substrings -> Pcre.substrings
  val extract :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int ->
    ?full_match:bool -> ?callout:Pcre.callout -> string -> string array
  val extract_all :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int ->
    ?full_match:bool -> ?callout:Pcre.callout -> string -> string array array
  val pmatch :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string -> ?pos:int -> ?callout:Pcre.callout -> string -> bool
  type substitution
  val subst : string -> Pcre.substitution
  val replace :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int ->
    ?itempl:Pcre.substitution ->
    ?templ:string -> ?callout:Pcre.callout -> string -> string
  val qreplace :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int -> ?templ:string -> ?callout:Pcre.callout -> string -> string
  val substitute_substrings :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int ->
    ?callout:Pcre.callout ->
    subst:(Pcre.substrings -> string) -> string -> string
  val substitute :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int ->
    ?callout:Pcre.callout -> subst:(string -> string) -> string -> string
  val replace_first :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int ->
    ?itempl:Pcre.substitution ->
    ?templ:string -> ?callout:Pcre.callout -> string -> string
  val qreplace_first :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int -> ?templ:string -> ?callout:Pcre.callout -> string -> string
  val substitute_substrings_first :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int ->
    ?callout:Pcre.callout ->
    subst:(Pcre.substrings -> string) -> string -> string
  val substitute_first :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int ->
    ?callout:Pcre.callout -> subst:(string -> string) -> string -> string
  val split :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int -> ?max:int -> ?callout:Pcre.callout -> string -> string list
  val asplit :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int -> ?max:int -> ?callout:Pcre.callout -> string -> string array
  type split_result =
      Text of string
    | Delim of string
    | Group of int * string
    | NoGroup
  val full_split :
    ?iflags:Pcre.irflag ->
    ?flags:Pcre.rflag list ->
    ?rex:Pcre.regexp ->
    ?pat:string ->
    ?pos:int ->
    ?max:int -> ?callout:Pcre.callout -> string -> Pcre.split_result list
  val foreach_line : ?ic:Pervasives.in_channel -> (string -> unit) -> unit
  val foreach_file :
    string list -> (string -> Pervasives.in_channel -> unit) -> unit
  external unsafe_pcre_exec :
    Pcre.irflag ->
    Pcre.regexp ->
    int -> string -> int -> int array -> Pcre.callout option -> unit
    = "pcre_exec_stub_bc" "pcre_exec_stub"
  val make_ovector : Pcre.regexp -> int * int array
end