1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//! [](https://crates.io/crates/safe-regex-macro)
//! [](http://www.apache.org/licenses/LICENSE-2.0)
//! [](https://github.com/rust-secure-code/safety-dance/)
//! [](https://gitlab.com/leonhard-llc/safe-regex-rs/-/pipelines)
//!
//! This crate provides the `regex!` macro used by the
//! [`safe-regex`](https://crates.io/crates/safe-regex) crate.
//!
//! It is a thin wrapper around the
//! [`safe-regex-compiler`](https://crates.io/crates/safe-regex-compiler)
//! crate.
//!
//! # Cargo Geiger Safety Report
//! # Changelog
//! See [`safe_regex`](https://crates.io/crates/safe-regex) create.
//!
//! # Release Process
//! 1. Edit `Cargo.toml` and bump version number.
//! 1. Run `../release.sh`
/// Compiles a regular expression into a Rust type.
///
/// Returns a `MatcherN` struct where `N` is the number of capturing groups.
///
/// Specify the type of the expected matcher so your editor can
/// show its functions and documentation:
/// `let matcher: Matcher0<_> = regex!(br".")`.
///
/// # Examples
/// ```rust
/// use safe_regex::{regex, Matcher0};
/// let matcher: Matcher0<_> =
/// regex!(br"[ab][0-9]*");
/// assert!(matcher.is_match(b"a42"));
/// assert!(!matcher.is_match(b"X"));
/// ```
///
/// ```rust
/// use safe_regex::{regex, Matcher3};
/// let matcher: Matcher3<_> =
/// regex!(br"([ab])([0-9]*)(suffix)?");
/// let (prefix, digits, suffix) =
/// matcher.match_slices(b"a42").unwrap();
/// assert_eq!(b"a", prefix);
/// assert_eq!(b"42", digits);
/// assert_eq!(b"", suffix);
/// let (prefix_range, digits_r, suffix_r)
/// = matcher.match_ranges(b"a42").unwrap();
/// assert_eq!(0..1_usize, prefix_range);
/// assert_eq!(1..3_usize, digits_r);
/// assert_eq!(0..0_usize, suffix_r);
/// ```