Bos.Pat
Named 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 -> t
v s
is a pattern from the string s
.
val empty : t
empty
is an empty pattern.
val dom : t -> Astring.String.Set.t
dom p
is the set of variables in p
.
val of_string : string -> (t, [> Rresult.R.msg ]) Rresult.result
of_string s
parses s
according to the pattern syntax (i.e. a literal '$'
must be represented by "$$"
in s
).
val to_string : t -> string
to_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 -> unit
pp ppf p
prints p
on ppf
according to the pattern syntax.
val dump : Stdlib.Format.formatter -> t -> unit
dump 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 -> bool
matches 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.