Generalized regex like pattern match for vector.
```toml
[dependencies] vec-reg = "0.7.0" ```
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]); ```
| 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
|