Bos.PatNamed string patterns.
Named string patterns are strings with variables of the form "$(VAR)" where VAR is any (possibly empty) sequence of bytes except ')' or ','. In a named string pattern a "$" literal must be escaped by "$$".
Named string patterns can be used to format strings or to match data.
val v : string -> tv s is a pattern from the string s.
val empty : tempty is an empty pattern.
val dom : t -> Astring.String.Set.tdom p is the set of variables in p.
val of_string : string -> (t, [> Rresult.R.msg ]) Rresult.resultof_string s parses s according to the pattern syntax (i.e. a literal '$' must be represented by "$$" in s).
val to_string : t -> stringto_string p converts p to a string according to the pattern syntax (i.e. a literal '$' will be represented by "$$").
val pp : Stdlib.Format.formatter -> t -> unitpp ppf p prints p on ppf according to the pattern syntax.
val dump : Stdlib.Format.formatter -> t -> unitdump ppf p prints p as a syntactically valid OCaml string on ppf.
Note. Substitution replaces variables with data, i.e. strings. It cannot substitute variables with variables.
Type type for variable definitions. Maps pattern variable names to strings.
subst ~undef defs p tries to substitute variables in p by their value. First a value is looked up in defs and if not found in undef. undef defaults to (fun _ -> None).
format ~undef defs p substitutes all variables in p with data. First a value is looked up in defs and if not found in undef (defaults to fun _ -> ""). The resulting string is not in pattern syntax (i.e. a literal '$' is represented by '$' in the result).
Pattern variables greedily match from zero to more bytes from left to right. This is .* in regexp speak.
val matches : t -> string -> boolmatches p s is true iff the string s matches p. Here are a few examples:
matches (v "$(mod).mli") "string.mli" is true.matches (v "$(mod).mli") "string.mli " is false.matches (v "$(mod).mli") ".mli" is true.matches (v "$(mod).$(suff)") "string.mli" is true.matches (v "$(mod).$(suff)") "string.mli " is true.query ~init p s is like matches except that a matching string returns a map from each pattern variable to its matched part in the string (mappings are added to init, defaults to String.Map.empty) or None if s doesn't match p. If a variable appears more than once in pat the first match is returned in the map.