Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Character Classes

Define sets of characters to match.

Basic Classes

fn main() {
    use fuzzy_regex::FuzzyRegex;

    // Match any vowel
    let re1 = FuzzyRegex::new("[aeiou]").unwrap();

    // Match any consonant
    let re2 = FuzzyRegex::new("[^aeiou]").unwrap();

    // Match any lowercase letter
    let re3 = FuzzyRegex::new("[a-z]").unwrap();

    // Match any alphanumeric
    let re4 = FuzzyRegex::new("[a-zA-Z0-9]").unwrap();
    
    println!("vowel: {}", re1.is_match("a"));
    println!("consonant: {}", re2.is_match("b"));
}

Predefined Classes

By default, \w, \d, \s match ASCII characters only:

EscapeASCII OnlyUnicode (with (?u)
\d[0-9]Unicode digits
\D[^0-9]Non-digit
\w[a-zA-Z0-9_]Unicode word chars
\W[^a-zA-Z0-9_]Non-word
\s[ \t\n\r\f]Unicode whitespace
\S[^ \t\n\r\f]Non-whitespace

Unicode Mode

Enable Unicode character classes with (?u) flag:

fn main() {
    use fuzzy_regex::FuzzyRegexBuilder;

    // Via inline flag
    let re1 = FuzzyRegex::new(r"(?u)\w+").unwrap();
    assert!(re1.is_match("привет")); // Cyrillic matched

    // Via builder
    let re2 = FuzzyRegexBuilder::new(r"\w+")
        .unicode(true)
        .build()
        .unwrap();
}

Unicode Property Escapes

fn main() {
    use fuzzy_regex::FuzzyRegex;

    // Unicode letters
    let re1 = FuzzyRegex::new(r"\p{L}").unwrap();

    // Unicode digits
    let re2 = FuzzyRegex::new(r"\p{N}").unwrap();

    // Emoji
    let re3 = FuzzyRegex::new(r"\p{Emoji}").unwrap();
    
    println!("letter: {}", re1.is_match("a"));
    println!("digit: {}", re2.is_match("١")); // Arabic-Indic digit
}

Nested Classes

fn main() {
    use fuzzy_regex::FuzzyRegex;

    // POSIX-like classes (inside character class)
    let re = FuzzyRegex::new("[[:alpha:]]").unwrap();
    println!("alpha: {}", re.is_match("a"));
}