macro_rules! define_string_pattern {
{ $(
$vis:vis fn $Name:ident (
$($arg:tt $($arg1:ident)* $(: $Arg:ty)?),* $(,)?
) $body:block
)* } => { ... };
}Expand description
define_string_pattern!(
fn identifier(max_len: impl Into<Option<u32>>) {
!precedes(ascii_digit())
+ word().repeat(1..=max_len.into().unwrap_or(u32::MAX)).simple()
+ word_boundary()
}
);
assert_eq!(string_matcher!(identifier(4)).match_string(0, "foo"), Some(0..3));
assert_eq!(string_matcher!(identifier(4)).match_string(0, "foobar"), None);
assert_eq!(string_matcher!(identifier(None)).match_string(0, "foobarbaz"), Some(0..9));