1 /*!
2 Provides a regex matcher that composes several other regex matchers
3 automatically.
4 
5 This module is home to a meta [`Regex`], which provides a convenient high
6 level API for executing regular expressions in linear time.
7 
8 # Comparison with the `regex` crate
9 
10 A meta `Regex` is the implementation used directly by the `regex` crate.
11 Indeed, the `regex` crate API is essentially just a light wrapper over a meta
12 `Regex`. This means that if you need the full flexibility offered by this
13 API, then you should be able to switch to using this API directly without
14 any changes in match semantics or syntax. However, there are some API level
15 differences:
16 
17 * The `regex` crate API returns match objects that include references to the
18 haystack itself, which in turn makes it easy to access the matching strings
19 without having to slice the haystack yourself. In contrast, a meta `Regex`
20 returns match objects that only have offsets in them.
21 * At time of writing, a meta `Regex` doesn't have some of the convenience
22 routines that the `regex` crate has, such as replacements. Note though that
23 [`Captures::interpolate_string`](crate::util::captures::Captures::interpolate_string)
24 will handle the replacement string interpolation for you.
25 * A meta `Regex` supports the [`Input`](crate::Input) abstraction, which
26 provides a way to configure a search in more ways than is supported by the
27 `regex` crate. For example, [`Input::anchored`](crate::Input::anchored) can
28 be used to run an anchored search, regardless of whether the pattern is itself
29 anchored with a `^`.
30 * A meta `Regex` supports multi-pattern searching everywhere.
31 Indeed, every [`Match`](crate::Match) returned by the search APIs
32 include a [`PatternID`](crate::PatternID) indicating which pattern
33 matched. In the single pattern case, all matches correspond to
34 [`PatternID::ZERO`](crate::PatternID::ZERO). In contrast, the `regex` crate
35 has distinct `Regex` and a `RegexSet` APIs. The former only supports a single
36 pattern, while the latter supports multiple patterns but cannot report the
37 offsets of a match.
38 * A meta `Regex` provides the explicit capability of bypassing its internal
39 memory pool for automatically acquiring mutable scratch space required by its
40 internal regex engines. Namely, a [`Cache`] can be explicitly provided to lower
41 level routines such as [`Regex::search_with`].
42 
43 */
44 
45 pub use self::{
46     error::BuildError,
47     regex::{
48         Builder, Cache, CapturesMatches, Config, FindMatches, Regex, Split,
49         SplitN,
50     },
51 };
52 
53 mod error;
54 #[cfg(any(feature = "dfa-build", feature = "hybrid"))]
55 mod limited;
56 mod literal;
57 mod regex;
58 mod reverse_inner;
59 #[cfg(any(feature = "dfa-build", feature = "hybrid"))]
60 mod stopat;
61 mod strategy;
62 mod wrappers;
63