vec-reg

Generalized regex like pattern match for vector.

Build status Crates.io Documentation

Install

```toml

Cargo.toml

[dependencies] vec-reg = "0.7.1" ```

Usage

```rust use vecreg::{Regex, CompiledRegex, vecreg};

let isfizz = |x: &i32| x % 3 == 0; let isbuzz = |x: &i32| x % 5 == 0; let reg = vecreg!(([isfizz])((?:[isbuzz])(?P<"FizzBuzz">[|x| x % 15 == 0]))+).compile();
assert!(reg.is
match(&[1, 2, 3, 5, 15, 20])); assert!(reg.isfullmatch(&[3, 5, 15, 10, 30]));

let findresult = reg.find(&[1,3,5,15]); assert!(findresult.issome()); asserteq!(findresult.asref().unwrap().range(), 1..4);

let captures = reg.captures(&[1, 3, 5, 15, 10, 30, 2]); assert!(captures.issome()); // 0th capture always correspond to the entire match. asserteq!(captures.as_ref().unwrap().get(0).unwrap().range(), 1..6);

asserteq!(captures.asref().unwrap().get(1).unwrap().range(), 1..2); asserteq!(captures.asref().unwrap().get(1).unwrap().values(), &[3]);

// Named capture can be accessed both index and name. asserteq!(captures.asref().unwrap().get(3).unwrap().values(), &[30]); asserteq!(captures.asref().unwrap().get(3).unwrap().range(), 5..6);

asserteq!(captures.asref().unwrap().name("FizzBuzz").unwrap().values(), &[30]); asserteq!(captures.asref().unwrap().name("FizzBuzz").unwrap().range(), 5..6); ```

Supported Syntax

| Syntax | Description | |:--|:--| | [function_name] | Match any values that satisfied given function. | | [\|x\| *x == 1] | Match any values that satisfied given closure. | | [^function_name] | Match any values that not satisfied given function. | | [^\|x\| *x == 1] | Match any values that not satisfied given closure. | | . | Match any values. | | ^ | a beginning of input | | $ | a end of input | | (R) | numbered capturing group (submatch) | | (?:R) | non-capturing group | | (?P<"name">R) | named & numbered capturing group (submatch) | | RS | R followed by S | | R\|S | R or S (prefer R) | | R? | zero or one R, prefer one | | R?? | zero or one R, prefer zero | | R* | zero or more R, prefer more | | R*? | zero or more R, prefer fewer | | R+ | one or more R, prefer more | | R+? | one or more R, prefer fewer | | R{n,m} | n or n + 1 or ... or m, prefere more | | R{n,m}? | n or n + 1 or ... or m, prefere fewer | | R{n,} | n or more R, prefere more | | R{n,}? | n or more R, prefere fewer | | R{n} | exactly n R | | R{n}? | exactly n R |