include Parser_intf.Parser
module type S = Parser_intf.S
include S
type 'a t
A value of type 'a t
is a regex that parses 'a
s.
The matching is implemented using Re2.
UTF-8 is supported by Re2 but not by this module. This is because we want to use
char
as a character type, but that's just wrong in a multibyte encoding.
include sig ... end
val sexp_of_t : ('a ‑> Sexplib.Sexp.t) ‑> 'a t ‑> Sexplib.Sexp.t
val compile : ?case_sensitive:bool ‑> 'a t ‑> (string ‑> 'a option) Core_kernel.Staged.t
case_sensitive
defaults to true
.
val run : ?case_sensitive:bool ‑> 'a t ‑> string ‑> 'a option
val matches : ?case_sensitive:bool ‑> 'a t ‑> string ‑> bool
val to_regex_string : _ t ‑> string
to_regex_string
and to_re2
both forget what a 'a t
knows
about turning the matching strings into 'a
s
val to_re2 : ?case_sensitive:bool ‑> _ t ‑> Re2_internal.t
The applicative interface provides sequencing, e.g. both a b
is a regex that
parses an a
followed by a b
and returns both results in a pair.
include Core_kernel.Applicative.S with type a t := a t
val return : 'a ‑> 'a t
module Applicative_infix : sig ... end
val of_re2 : Re2_internal.t ‑> string option array t
of_re2 r
forgets the options that r
was compiled with, instead using
`Encoding_latin1 true
, `Dot_nl true
, and the case-sensitivity setting of the
overall pattern. You can still try and use '(?flags:re)' Re2 syntax to set options
for the scope of this regex.
The returned values are precisely the captures of the underlying regex, in order:
note that unlike (say) Re2.Match.get_all
, the whole match is *not* included (if
you want that, just use capture
). Named captures are not accessible by name.
ignore t
is a regex which matches the same strings that t
matches, but doesn't
call functions on the captured submatches. Particularly, something like ignore (map
(string "x") ~f:Int.of_string)
won't raise an exception, because the int conversion
is never attempted.
and_capture t
returns the string matched by t
in addition to whatever it was
already going to return.
repeat ~min ~max t
constructs the regex t{min,max}
. min
defaults to 0
and
max
defaults to None
(unbounded), so that just plain repeat t
is equivalent
to t*
.
It would be better for repeat
to be 'a t -> 'a list t
, but the re2 library
doesn't give you access to repeated submatches like that. Hence, repeat
ignores
all submatches of its argument and does not call any callbacks that may have been
attached to them, as if it had ignore
called on its result.
times r n
essentially constructs the regex r. It is equivalent to
repeat ~min:n ~max:(Some n) r
.
Compare with, say, all (List.init n ~f:(fun _ -> r))
, which constructs the regex
rrr...r (with n copies of r) and has the type 'a t -> 'a list t
.
val string : string ‑> unit t
val any_string : string t
module Char : sig ... end
module Decimal : sig ... end
module Let_syntax : sig ... end