cloudflare/wildcard
Rust
Captured source
source ↗cloudflare/wildcard
Description: Wildcard matching
Language: Rust
License: Apache-2.0
Stars: 215
Forks: 7
Open issues: 4
Created: 2024-07-01T14:27:53Z
Pushed: 2026-04-27T12:21:21Z
Default branch: main
Fork: no
Archived: no
README:   
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 = 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 chars:
let p = "*foo?*bar".chars().collect::>(); let wildcard = Wildcard::new(&p).unwrap(); assert!(wildcard.is_match(&"fooofooobar".chars().collect::>()));
Matching customization
With wildcard you can configure these properties of a wildcard:
1. Configure the symbols for the metasymbols * and ? as well as the escape symbol. 2. Support for the metasymbol ? can be disabled. 3. Support for escaping can be disabled. 4. Support for case-insensitive matching.