RepoCloudflare (Workers AI)Cloudflare (Workers AI)published Jul 1, 2024seen 5d

cloudflare/wildcard

Rust

Open original ↗

Captured source

source ↗
published Jul 1, 2024seen 5dcaptured 8hhttp 200method plain

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: ![Build Status](https://github.com/cloudflare/wildcard/actions?query=workflow%3ACI) ![Dependency status](https://deps.rs/repo/github/cloudflare/wildcard) ![Documentation](https://docs.rs/wildcard/)

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.