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()]);
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<_>>()));
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.