Crates.io | wildcard |
lib.rs | wildcard |
version | 0.3.0 |
source | src |
created_at | 2024-05-24 09:51:10.320511 |
updated_at | 2024-11-14 21:33:46.381172 |
description | Wildcard matching |
homepage | https://github.com/cloudflare/wildcard |
repository | https://github.com/cloudflare/wildcard |
max_upload_size | |
id | 1250866 |
size | 105,768 |
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()]);
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:
*
and ?
as well as the escape symbol.?
can be disabled.