4 releases (breaking)
0.3.0 | Nov 14, 2024 |
---|---|
0.2.0 | Jul 9, 2024 |
0.1.0 | Jul 3, 2024 |
0.0.0-pre | May 24, 2024 |
#73 in Text processing
27,030 downloads per month
Used in 4 crates
(3 directly)
56KB
1K
SLoC
wildcard
wildcard
is a rust crate for wildcard matching.
Here's how to use it:
let wildcard = Wildcard::new("*foo?*bar".as_bytes()).unwrap();
assert!(wildcard.is_match("fooofooobar".as_bytes()));
Special characters can be escaped to represent their literal symbol:
let wildcard = Wildcard::new(r"\*\?".as_bytes()).unwrap();
assert!(!wildcard.is_match("ab".as_bytes()));
assert!(wildcard.is_match("*?".as_bytes()));
You can also capture the substring that matched the metasymbols of the wildcard:
let wildcard = Wildcard::new("* is a * style?".as_bytes()).unwrap();
let captures: Vec<&[u8]> = wildcard.captures("Lambic is a beer style!".as_bytes()).unwrap();
assert_eq!(captures, ["Lambic".as_bytes(), "beer".as_bytes(), "!".as_bytes()]);
String matching
For performance reasons wildcard
does not match directly on strings, but it supports matching
on slices of char
s:
let p = "*foo?*bar".chars().collect::<Vec<_>>();
let wildcard = Wildcard::new(&p).unwrap();
assert!(wildcard.is_match(&"fooofooobar".chars().collect::<Vec<_>>()));
Matching customization
With wildcard
you can configure these properties of a wildcard:
- Configure the symbols for the metasymbols
*
and?
as well as the escape symbol. - Support for the metasymbol
?
can be disabled. - Support for escaping can be disabled.
- Support for case-insensitive matching.
Dependencies
~245–690KB
~16K SLoC