vec-reg

Generalized regex like pattern match for vector.

Build status Crates.io Documentation

Install

```toml

Cargo.toml

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

Usage

Example without macro:

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

let isfizz = |x: &i32| x % 3 == 0; let isbuzz = |x: &i32| x % 5 == 0; let isfizzbuzz = |x: &i32| x % 15 == 0; let reg = Regex::concat( Regex::satisfy(isfizz), Regex::repeat1(Regex::concat(Regex::satisfy(isbuzz), Regex::satisfy(isfizzbuzz)), true), ) .compile(); assert!(!reg.ismatch(&vec![1, 2, 3])); assert!(reg.ismatch(&vec![3, 5, 15])); assert!(reg.is_match(&vec![6, 10, 15, 10, 30])); ```

Example with macro:

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

let isfizz = |x: &i32| x % 3 == 0; let isbuzz = |x: &i32| x % 5 == 0; let reg = vecreg!(isfizz+).compile();
assert!(!reg.ismatch(&vec![1, 2, 3])); assert!(reg.ismatch(&vec![3, 5, 15])); assert!(reg.is_match(&vec![6, 10, 15, 10, 30])); ```

Example capture:

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

let iseven = |x: &i32| x % 2 == 0; let isodd = |x: &i32| x % 2 == 1; let reg = vecreg!(([iseven]+)iseven).compile(); let captures = reg.captures(&[2, 4, 6, 3, 5, 7]); assert!(captures.issome());

let capture1 = &captures.asref().unwrap().get(1).unwrap(); asserteq!(capture1.range(), 0..2); asserteq!(capture1.values(), &[2, 4]);

let capture2 = &captures.asref().unwrap().get(2).unwrap(); asserteq!(capture2.range(), 3..6); asserteq!(capture2.values(), &[3, 5, 7]); ```

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 |