// 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#"(?im)^(?=.{1,64}@)(?:("[^"\\]*(?:\\.[^"\\]*)*"@)|((?:[0-9a-z](?:\.(?!\.)|[-!#\$%&'\*\+\/=\?\^`\{\}\|~\w])*)?[0-9a-z]@))(?=.{1,255}$)(?:(\[(?:\d{1,3}\.){3}\d{1,3}\])|((?:(?=.{1,63}\.)[0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9])|((?=.{1,63}$)[0-9a-z][-\w]*))$"#).unwrap();
let string = "// Mix valid/invalid
david.jones@proseware.com
d.j@server1.proseware.com
jones@ms1.proseware.com
j.@server1.proseware.com
j@proseware.com9
js#internal@proseware.com
j_9@[129.126.118.1]
j..s@proseware.com
js*@proseware.com
js@proseware..com
js@proseware.com9
j.s@server1.proseware.com
\"j\\\"s\\\"\"@proseware.com
js@contoso.中国.com
=========================================
// Valid
simple@example.com
very.common@example.com
disposable.style.email.with+symbol@example.com
other.email-with-hyphen@example.com
fully-qualified-domain@example.com
user.name+tag+sorting@example.com
fully-qualified-domain@example.com
x@example.com
carlosd'intino@arnet.com.ar
example-indeed@strange-example.com
admin@mailserver1
example@s.example
\" \"@example.org
\"john..doe\"@example.org
// Invalid
Abc.example.com
A@b@c@example.com
a\\\"b(c)d,e:f;g<h>i[j\\\\k]l@example.com
just\\\"not\\\"right@example.com
this is\\\"not\\\\allowed@example.com
this\\\\ still\\\"not\\\\allowed@example.com
1234567890123456789012345678901234567890123456789012345678901234+x@example.com
john..doe@example.com
john.doe@example..com
";
// 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/