// include the latest version of the regex crate in your Cargo.toml
extern crate regex;
use regex::Regex;
fn main() {
let regex = Regex::new(r"(?m)^((?<![\d\-\*])((\*\/)?([0-5]?[0-9])((\,|\-|\/)([0-5]?[0-9]))*|\*)[^\S\r\n]+((\*\/)?((2[0-3]|1[0-9]|[0-9]|00))((\,|\-|\/)(2[0-3]|1[0-9]|[0-9]|00))*|\*)[^\S\r\n]+((\*\/)?([1-9]|[12][0-9]|3[01])((\,|\-|\/)([1-9]|[12][0-9]|3[01]))*|\*)[^\S\r\n]+((\*\/)?([1-9]|1[0-2])((\,|\-|\/)([1-9]|1[0-2]))*|\*|(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec))[^\S\r\n]+((\*\/)?[0-6]((\,|\-|\/)[0-6])*|\*|00|(sun|mon|tue|wed|thu|fri|sat)))$|^@(annually|yearly|monthly|weekly|daily|hourly|reboot)$").unwrap();
let string = "#should pass:
5 4 * * sun
* * * * *
0 22 * * 1-5
1 1 1 1 1
23 0-20/2 * * *
* * * * *
0 0,12 1 */2 *
0 4 8-14 * *
0 0 1,15 * 3
@weekly
5 0 * 8 *
23 0-20/2 * * *
0 4 8-14 * *
0 0 1,15 * 3
@hourly
0 0,12 1 */2 *
* * * feb *
* 0-23/2 * * *
* 0,2,4,6,8,10,12,14,16,18,20,22 * * *
50 0 * * *
45 00 * * 1-5
0,30 * * * *
0 0 * * *
00 00 * * *
0,30 * * * *
0 0,12 * * *
5 0 * * *
05 0 * * *
15 14 1 * *
0 22 * * 1-5
23 0-23/2 * * *
* * * * 0-5
* * * 12-12 *
* * * * 0-6
* * 30-31 * *
1-59 * * * *
00 00-00 * * *
* * 30,31 * *
0 22 * * 1-5
23 0-20/2 * * *
23 10-20/10 * * *
* * * * *
* * * * *
#should not pass:
23 55-20/10 * * *
1-60 * * * 1
3 * * * 50
* * * 20 50
1 * * 12-14 *
1 * * * 30
* * * * 0-8
5 * * * 8
* * * * 5,8
* * 30-34 * *
0 * * 0 1-4
0 0 0 12 *
*-* * * * *
* * *-1 * *
*1 * 1 * *
1* * 1 * *";
// result will be an iterator over tuples containing the start and end indices for each match in the string
let result = regex.captures_iter(string);
for mat in result {
println!("{:?}", mat);
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Rust, please visit: https://docs.rs/regex/latest/regex/