// 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<LogTime>[A-Za-z0-9 :]+)\s(?P<Hostname>[a-z0-9.-]+)\s(?:ae_(?P<EnvIdentity>[a-z-]+):)\s(?P<ModuleName>[a-zA-Z._]+)?\s-\s(?P<LogLevel>[A-Z]+)\s-\s(?:\[JID:(gen:)?(?P<TaskId>[a-z0-9-]+)\]\s?)?(?:\[FID:(?P<FieldId>[a-z0-9-]+)\]\s?)?(?:\[Itin:(?P<Itinerary>[A-Za-z0-9]+)(?:->(?P<Step>[A-Z0-9a-z]+))?\]\s?)?(?:\[State:(?P<State>[A-Za-z]+)\]\s?)?(?:alias=(?P<StepAlias>[a-z0-9]+),\s)?(?:runtime_s=\[?(?P<JobRuntimeSeconds>[0-9.]+)\]?\s?)?(?:metadata=(?P<Metadata>{.*}))?$").unwrap();
let string = "Oct 30 09:54:06 production-ae-workers-d8c35 ae_env-name: ae.core.manager - INFO - [JID:gen:156364bc-fb25-11e9-8d15-02420af40b07] [FID:dead-f4rm-dead] [Itin:RunFieldForecastHourlyUpdate] [State:Finished] runtime_s=[16.03] metadata={\"initiating_event\": \"hourly\", \"hourly_timestamp\": \"2019/10/30/14/00\", \"timestamp\": \"2019/10/30/08/00\", \"pd_meta\": {\"farm\": {\"uuid\": \"dead-beef-dead\", \"name\": \"My Farm Name\"}, \"field\": {\"uuid\": \"dead-b00b-dead\", \"name\": \"My house\"}, \"token\": \"REDACTED\", \"organization\": {\"uuid\": \"dead-f00d-dead\", \"name\": \"My Organization\"}, \"enterprise_group\": {\"uuid\": \"dead-gr0up-dead\", \"name\": \"My Group\"}}, \"field_uuid\": \"dead-f4rm-dead\", \"token\": \"REDACTED\", \"process_cfs\": false, \"seed_corn\": false, \"current_cropping\": null, \"daily_timestamp\": \"2019/10/30/08/00\", \"ye_target\": \"user\", \"priority\": 3}";
// 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/