// 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#"(?mi)(?P<first>^(?P<intend>\s*?)diagGetParameterRaw.+?(?P<diagresp>\w.+?),.*?\"SecurityClass\", (?P<first_rest>.+?;(?P<newline>[\n\r]+)))(?P<second>(?P<second_start>\s*?_DiagGenerateKeyFromSeed.+.?buffer,).+?(?P<second_rest>0x\d+?,.+))"#).unwrap();
let string = "// diagGetParameterRaw(transition_1_2_0_Resp, \"SecurityClass\", buffer, 4096);
// _DiagGenerateKeyFromSeed (buffer, 1, 0x11, \"BR120x\", \"\", op1, 6, _length); length = 6;
*******
diagGetParameterRaw(transition_1_2_0_Resp, \"SecurityClass\", buffer, 4096);
_DiagGenerateKeyFromSeed (buffer, 1, 0x11, \"BR120x\", \"\", op1, 6, _length); length = 6;
diagGetParameterRaw(transition_1_2_0_Resp, \"SecurityClass\", buffer, 4096);
_DiagGenerateKeyFromSeed (buffer, 1, 0x11, \"BR120x\", \"\", op1, 6, _length); length = 6;
****************
RawDiagGetParameterRaw(transition_1_0_0_Resp, 16, 64, buffer, 4096);
_DiagGenerateKeyFromSeed (buffer, 8, 0x11, \"BR120x\", \"\", op1, 6, _length); length = 6;
";
let substitution = "\\g<newline>\\g<intend>\\g<newline>//\\g<intend>removed the next two lines as diva uses only one of our three parameters\\g<newline>//\\g<first>//\\g<second>\\g<newline>//\\g<intend>\\g<newline>//\\g<intend>this works correctly:\\g<newline>\\g<intend>\\g<newline>\\g<intend>RawDiagGetParameterRaw ( \\g<diagresp>, 16, 64, \\g<first_rest>\\g<second_start> 8, \\g<second_rest>\\g<newline>\\g<newline>//\\g<intend>replacement ends here\\g<newline>\\g<intend>";
// result will be a String with the substituted value
let result = regex.replace_all(string, substitution);
println!("{}", result);
}
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/