// 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)^(?P<str_lit>(?P<begin_quote>(?P<single_quote>')|\")(?:(?(single_quote)\"|')|\\[\"']|\\[^\r\n ]|[^\"'\\\r\n])*?(?P=begin_quote))$"#).unwrap();
let string = "\"double-quoted string\"
'single-quoted string'
\"unexpected EOL
'unexpected EOL
\"unclosed backslash escape: \\\"
\"properly doubled backslash: \\\\\"
\"escaped ' quotes and backslash escapes \\' are \\\" \\n allowed\"
\"\\t\\tindented code\\r\\n\"
\"invalid escape \\%\"
\"'\"
\"space is not a valid backslash escape: \\ \"
\"or newline either: \\
\"hopefully there aren't any edge-cases I didn't think of\"
\"\"\"oh, and single-line docstrings count as three string literals, so you would have to repeat the same expression multiple times to match it\"\"\"
\"\"\"and multi-line docstrings won't match even if you repeat the expression multiple times";
// 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/