Crates.io | readable-regex |
lib.rs | readable-regex |
version | 0.1.0-alpha1 |
source | src |
created_at | 2022-08-24 16:45:54.366726 |
updated_at | 2022-08-24 16:45:54.366726 |
description | Regex made for humans. Wrapper to build regexes in a verbose style. |
homepage | https://github.com/danielSanchezQ/readable-regex |
repository | https://github.com/danielSanchezQ/readable-regex |
max_upload_size | |
id | 651714 |
size | 80,692 |
Regex is useful. But, sincerely, since code it is more read than written regex could be more understandable in a verbose mode.
readable-regex
crate is a set of tools to build those regexes in a verbose way. Which aims
to improve readability of code.
It builds on top on the already excellent regex
and fancy-regex
crates.
Add the dependency to your Cargo.toml
file:
readable-regex = "0.1.0"
The main wrapper is the ReadableRe
enum.
There are tow main options to build regexes with it, either using the enum itself:
use readable_regex::ReadableRe;
let query = ReadableRe::Raw("<some regex expression>");
or by using the functions wrappers around it:
use readable_regex::raw_regex;
let query = raw_regex("<some regex expression>");
Also, any combination of them:
use readable_regex::{digit, group};
use readable_regex::ReadableRe::*;
let query = group(digit() + Digit + digit());
println!("{}", query.to_string());
How to build a simple date match (as implemented in the datetime
module under presets
feature):
use once_cell::sync::Lazy;
use readable_regex::*;
use readable_regex::ReadableRe::*;
/// Month day, `01`-`31`
pub const DAY: Lazy<ReadableRe> = Lazy::new(|| {
either([
Raw("0") + chars("1-9"),
chars("12") + chars("1-9"),
Raw("3") + chars("01"),
])
});
/// Month numeral, `01`-`12`
pub const MONTH: Lazy<ReadableRe> =
Lazy::new(|| either([Raw("0") + chars("1-9"), Raw("1") + chars("0-2")]));
/// Years from `1000` to `2999`
pub const YEAR: Lazy<ReadableRe> = Lazy::new(|| chars("12") + exactly(3, Digit));
/// Date Format `YYYY-MM-dd`
pub const DATE_Y_M_D: Lazy<ReadableRe> = Lazy::new(|| {
group(
group(YEAR.clone())
+ chars(r"-/.\\")
+ group(MONTH.clone())
+ chars(r"-/.\\")
+ group(DAY.clone()),
)
});
assert!(DATE_Y_M_D.compile().unwrap().is_match("2022/04/18"));
This library was highly inspired by the python Humre
package.