vec_reg/
lib.rs

1//!
2//! Generalized regex like pattern match for vector.
3//!
4//!  ```rust
5//!  use vec_reg::{Regex, CompiledRegex, vec_reg};
6//!
7//!  let is_fizz = |x: &i32| x % 3 == 0;
8//!  let is_buzz = |x: &i32| x % 5 == 0;
9//!  let reg = vec_reg!([is_fizz]([is_buzz][|x| x % 15 == 0])+).compile();    
10//!  assert!(!reg.is_match(&vec![1, 2, 3]));
11//!  assert!(reg.is_match(&vec![3, 5, 15]));
12//!  assert!(reg.is_match(&vec![6, 10, 15, 10, 30]));
13//!  ```
14//!
15//! ## Supported Syntax
16//!
17//! | Syntax | Description |
18//! |:--|:--|
19//! | `[function_name]` | Match any values that satisfied given function. |
20//! | <code>[\|x\| *x == 1]</code> | Match any values that satisfied given closure. |
21//! | `[^function_name]` | Match any values that not satisfied given function. |
22//! | <code>[\^\|x\| *x == 1]</code> | Match any values that not satisfied given closure. |
23//! | `.` | Match any values. |
24//! | `^` | a beginning of input |
25//! | `$` | a end of input |
26//! | `(R)` | numbered capturing group (submatch) |
27//! | `(?:R)` | non-capturing group |
28//! | `(?P<"name">R)` | named & numbered capturing group (submatch) |
29//! | `RS` | `R` followed by `S` |
30//! | <code>R\|S</code> | `R` or `S` (prefer `R`) |
31//! | `R?` | zero or one `R`, prefer one |
32//! | `R??` | zero or one `R`, prefer zero |
33//! | `R*` | zero or more `R`, prefer more |
34//! | `R*?` | zero or more `R`, prefer fewer |
35//! | `R+` | one or more `R`, prefer more |
36//! | `R+?` | one or more `R`, prefer fewer |
37//! | `R{n,m}` | `n` or `n` + 1 or ... or `m`, prefere more |
38//! | `R{n,m}?` | `n` or `n` + 1 or ... or `m`, prefere fewer |
39//! | `R{n,}` | `n` or more `R`, prefere more |
40//! | `R{n,}?` | `n` or more `R`, prefere fewer |
41//! | `R{n}` | exactly `n` `R` |
42//! | `R{n}?` | exactly `n` `R` |
43
44pub use vec_reg_common::{Captures, CompiledRegex, Match, Regex};
45pub use vec_reg_macro::vec_reg;
46
47#[cfg(doctest)]
48doc_comment::doctest!("../../README.md");