// 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)^(?!.*printf)([^"\n]*"[^"\n]*")*?[^"\n]*"[^"\n]{5,}""#).unwrap();
let string = "\"Match\":
write(\"blueberry\"); // yum
y = 34; write(\"banana\")
z = \"pineapple\";
Not match:
p = \"seed\";
printf(\"-%s-\", \"strawberry\"); // whatever
x = 12; printf(\"lime\"); write(\"coconut\")
x = 12;\"\"\"\" write(\"coconut\"); printf(\"lime\");
write(\"lime\"); write(\"lime\");
write(\"lime\"); write(\"abc printf abc\"); write(\"lime\");
write(\"lime\"); write(\"abc printf\"); write(\"lime\");
write(\"lime\"); write(\"p printf\"); write(\"lime\");
write(\"lime\"); write(\"pineapple printf\"); write(\"lime\");
write(\"lime\"); write(\" printf\"); write(\"lime\");
write(\"lime\"); write(\"printf abc\"); write(\"lime\");
write(\"lime\"); write(\"printf\"); write(\"lime\");
write(printf\"blueberry\"); // yum
write(\"blueberry\"printf); // yum
write(\"blueberry\"); printf // yum
z = \"pineapple printf\";";
// 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/