Page
Library
Module
Module type
Parameter
Class
Class type
Source
TyreSourceTyre is a set of combinators to build type-safe regular expressions, allowing automatic extraction and modification of matched groups.
Tyre is bi-directional: a typed regular expressions can be used both for matching and evaluation. Multiple tyregexs can be combined in order to do routing in similar manner as switches/pattern matching. Typed regular expressions are strictly as expressive as regular expressions from re (and are, as such, regular expressions, not PCREs). Performances should be exactly the same.
# let dim = Tyre.( str"dim:" *> int <&> str"x" *> int ) ;;
val dim : (int * int) Tyre.t
# let dim_re = Tyre.compile dim ;;
val dim_re : (int * int) Tyre.re
# Tyre.exec dim_re "dim:3x4" ;;
- : (int * int, (int * int) Tyre.error) result = Result.Ok (3, 4)
# Tyre.eval dim (2, 5) ;;
- : string = "dim:2x5"ppx_tyre allows to use the usual regular syntax, if prefered:
# let dim = [%tyre "dim:(?&int)x(?&int)"] ;;
val dim : (int * int) Tyre.tA typed regular expression.
The type variable is the type of the returned value when the typed regular expression (tyregex) is executed.
For example tyre : int t can be used to return an int. In the rest of the documentation, we will use «tyre» to designate a value of type t.
pcre s is a tyregex that matches the PCRE s and return the corresponding string. Groups in s are ignored.
regex re is a tyregex that matches re and return the corresponding string. Groups inside re are erased.
conv to_ from_ tyre matches the same text as tyre, but converts back and forth to a different data type.
to_ is allowed to raise an exception exn. In this case, exec will return `ConverterFailure exn.
For example, this is the implementation of pos_int:
let pos_int =
Tyre.conv
int_of_string string_of_int
(Tyre.regex (Re.rep1 Re.digit))opt tyre matches either tyre or the empty string. Similar to Re.opt.
alt tyreL tyreR matches either tyreL (and will then return `Left v) or tyreR (and will then return `Right v).
seq tyre1 tyre2 matches tyre1 then tyre2 and return both values.
prefix tyre_i tyre matches tyre_i, ignores the result, and then matches tyre and returns its result. Converters in tyre_i are never called.
int matches -?[0-9]+ and returns the matched integer.
Integers that do not fit in an int will fail.
pos_int matches [0-9]+ and returns the matched positive integer.
Integers that do not fit in an int will fail.
float matches -?[0-9]+( .[0-9]* )? and returns the matched floating point number.
Floating point numbers that do not fit in a float returns infinity or neg_infinity.
terminated_list ~sep tyre is list (tyre <* sep) .
separated_list ~sep tyre is equivalent to opt (e <&> list (sep *> e)).
See Re for details on the semantics of those combinators.
A compiled typed regular expression.
exec ctyre s matches the string s using the compiled tyregex ctyre and returns the extracted value.
Returns Error (`NoMatch (tyre, s) if tyre doesn't match s. Returns Error (`ConverterFailure exn) if a converter failed with the exception exn.
execp ctyre s returns true if ctyre matches s. Converters are never called.
all ctyre s calls to exec repeatedly and returns the list of all the matches.
all_seq ctyre s is all ctyre s but returns a gen instead. Matches are enumerated lazily.
Exceptions raised by converters are not caught.
route [ tyre1 --> f1 ; tyre2 --> f2 ] produces a compiled tyregex such that, if tyre1 matches, f1 is called, and so on.
The compiled tyregex shoud be used with exec.
eval tyre v returns a string s such that exec (compile tyre) s = v.
Note that such string s is not unique. eval will usually returns a very simple witness.
evalpp tyre ppf v is equivalent to Format.fprintf ppf "%s" (eval tyre v), but more efficient.
Is is generally used with "%a":
let my_pp = Tyre.evalpp tyre in
Format.printf "%a@." my_pp v