vec-reg

Generalized regex like pattern match for vector.

Build status Crates.io Documentation

Install

```toml

Cargo.toml

[dependencies] vec-reg = "0.5.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.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.range, 0..2); asserteq!(capture0.values(), &[2, 4]);

let capture1 = &captures.asref().unwrap()[1]; asserteq!(capture1.range, 3..6); asserteq!(capture1.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. | | 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 |