// 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)caller\"\s*:\s*\{\s*\"id\":\s*\"(?<callerid>[^\"]+)?\"\,\s*\"version\"\s*:\s*\"(?<callerversion>[^\"]+)?\""#).unwrap();
let string = "{
\"info\":{
\"eventSource\":\"\",
\"sourceType\":\"I/O\",
\"status\":{
\"code\":\"\",
\"msg\":\"\",
\"msgError\":\"\"
},
\"transactionId\":null,
\"traceId\":null,
\"timestampStart\":\"2019-05-16T21:30:55.174Z\",
\"timestampEnd\":\"2019-05-16T21:30:55.174Z\",
\"companyIDCode\":\"\",
\"channelIDCode\":\"\",
\"branchCode\":\"\",
\"searchFields\":{
\"key_3\":\"value\",
\"key_2\":\"value\",
\"key_1\":\"value\"
},
\"annotation\":{},
\"caller\":{
\"id\":\"caller_01\",
\"version\":\"1.2.3\",
\"acronym\":\"\"
},
\"called\":{
\"id\":\"called_id\",
\"version\":\"3.2.1\",
\"acronym\":\"\"
},
\"storage\":{
\"id\":\"\",
\"start\":\"\",
\"end\":\"\"
}
}
},
\"headers\":[],
\"payLoad\":{
\"input\":{
\"encoding\":\"1024\",
\"ccsid\":\"1024\",
\"data\":\"dati_in\"
},
\"output\":{
\"encoding\":\"1024\",
\"ccsid\":\"1024\",
\"data\":\"dati_out\"
}
}
}
";
// 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/