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

#69 in Text processing

Download history 5012/week @ 2024-10-08 5694/week @ 2024-10-15 5681/week @ 2024-10-22 6173/week @ 2024-10-29 5638/week @ 2024-11-05 6674/week @ 2024-11-12 7158/week @ 2024-11-19 6149/week @ 2024-11-26 6301/week @ 2024-12-03 7332/week @ 2024-12-10 5514/week @ 2024-12-17 3492/week @ 2024-12-24 5851/week @ 2024-12-31 9185/week @ 2025-01-07 7436/week @ 2025-01-14 6532/week @ 2025-01-21

29,642 downloads per month
Used in 4 crates (3 directly)

Apache-2.0

56KB
1K SLoC

Build Status Dependency status crates.io Downloads Github stars Documentation License

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 chars:

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:

  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.

Dependencies

~255–710KB
~16K SLoC