// 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)^(=?202\d)(\d{0,3}[A-Z]{1,4}|[A-Z]{1,4}\d{1,3})([\dA-Z]{0,4})A").unwrap();
let string = "Matches R1 R2 R3 R4 R5 R6
2022A144A OK OK OK OK \\D\\d\\d\\d
20228BC3A OK OK OK OK \\d\\D\\D\\d
20228Z1DA OK OK OK OK \\d\\D\\d\\D
2022K2 A
20229999A NOK \\d\\d\\d\\d
2022B123A OK OK OK OK \\D\\d\\d\\d
20221B23A OK OK OK OK \\d\\D\\d\\d
202212B3A NOK NOK NOK OK OK \\d\\d\\D\\d
2022123BA NOK OK \\d\\d\\d\\D
2022ABCDA
2022K2 A
Matches 100% as desired
R 12 2022(\\d\\D\\w\\w|\\D\\d\\w\\w|\\d\\d\\D\\w|\\d\\d\\w\\D|\\D\\D\\D\\D)A
R 13 ^(=?202\\d)(\\d{0,3}[A-Z]{1,4}|[A-Z]{1,4}\\d{1,3})([\\dA-Z]{0,4})A
Should match
R1: 2022\\d\\D\\w\\wA
R2: 2022\\D\\d\\w\\wA
R3: 2022(\\d\\D\\w\\w|\\D\\d\\w\\w)A
R4: 2022(\\d\\D\\w\\w|\\D\\d\\w\\w|\\d\\d\\D\\w)A
R5: 2022(\\d\\D\\w\\w|\\D\\d\\w\\w|\\d\\d\\D\\w|\\d\\d\\w\\D)A
R 10 ^(=?202\\d)(\\d*[A-Z]|[A-Z]*)([\\dA-Z]{1,3})A
R 11 ^(=?202\\d)(\\d{1,3}[A-Z]*)([\\dA-Z]{1,3})A
R 12 ^(=?202\\d)(\\d{1,3}[A-Z]{1,3}|[A-Z]{1,3}\\d{1,3})([\\dA-Z]{0,3})A
^ Start of string
(?=[a-z\\d]{8,}$) Positive lookahead, assert 8 or more chars a-z or digits till end of string
(?=\\d*[a-z]) Positive lookahead to assert at least a char a-z
[a-z]* Match optional chars a-z
\\d Match at least a single digit
[a-z\\d]* Match optional chars a-z or digits
$ End of string
Should not match
R6: 2022([A-Z0-9]{1,4})A
R7: 2022(\\d|\\w){1,3}\\wA <-- also matches 20229999A which it should not
R8: 2022\\w\\w\\s\\sA
R9 2022\\d\\d\\d\\dA";
// 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/