Thanks to visit codestin.com
Credit goes to lib.rs

#parser #macro-string #pattern

match-string

Lightweight pattern-matching utilities for strings and sequences, with a proc-macro for ergonomic syntax

3 releases

Uses new Rust 2024

0.1.2 Dec 24, 2025
0.1.1 Dec 24, 2025
0.1.0 Dec 24, 2025

#123 in Parser tooling

MIT/Apache

37KB
951 lines

match-string

A Rust library for simple and flexible string pattern matching.

Crates.io Documentation License

Examples

Simple matches using built-in tokens:

matches!("Hello, World!"    => ALPHABETIC, ", ", ALPHABETIC);
matches!("123 456"          => NUM, " ", NUM);
matches!("[12,34,56]"     => "[", NUM[","]+, "]");
matches!("foobarfoofoobar"  => ("foo" / "bar")+);

Capturing matched values:

let name: Dest<String> = Dest::new();
let greeting = matches!("Hello, Alice!" => "Hello, ", name@ALPHABETIC, "!");

let arrays: Dest<Vec<usize>> = Dest::new();
let numbers = matches!("[1,2,3]" => "[", (arrays@NUM)[","]+, "]");

Custom tokens:

const VOWELS: Token<char, String> = Token {
    /* Check each character */
    predicate: |ch| "aeiouAEIOU".contains(*ch),
    /* Convert Vec<char> to String */
    parser: |v| v.into_iter().collect(),
    /* Require at least one match */
    at_least: 1,
    /* Skip leading whitespace */
    skip_leading: Some(|ch: &char| ch.is_whitespace()), 
};

Dependencies

~110–470KB
~11K SLoC