vec-reg

Generalized regex like pattern match for vector.

Build status Crates.io Documentation

Install

```toml

Cargo.toml

[dependencies] vec-reg = "0.4.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))), ) .compile(); assert!(!reg.isfullmatch(&vec![1, 2, 3])); assert!(reg.isfullmatch(&vec![3, 5, 15])); assert!(reg.isfullmatch(&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.isfullmatch(&vec![1, 2, 3])); assert!(reg.isfullmatch(&vec![3, 5, 15])); assert!(reg.isfullmatch(&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()); asserteq!(captures.asref().unwrap().len(), 2);

let capture0 = &captures.asref().unwrap()[0]; asserteq!(capture0.start, 0); asserteq!(capture0.end, 1); asserteq!(&capture0.values, &vec![&2, &4]);

let capture1 = &captures.asref().unwrap()[1]; asserteq!(capture1.start, 3); asserteq!(capture1.end, 5); asserteq!(&capture1.values, &vec![&3, &5, &7]); ```