// 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"(?ms)^PING\b[^(]*\(([^)]*)\)\s([^.]*)\..*?^(\d+\sbytes).*?icmp_seq=(\d+).*?ttl=(\d+).*?time=(.*?ms).*?(\d+)\spackets\stransmitted.*?(\d+)\sreceived.*?(\d+%)\spacket\sloss.*?time\s(\d+ms).*?=\s([^\/]*)\/([^\/]*)\/([^\/]*)\/(.*?)\sms").unwrap();
let string = "PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.50 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=1.42 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=51.2 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=1.41 ms
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=1.39 ms
64 bytes from 192.168.1.1: icmp_seq=6 ttl=64 time=89.0 ms
64 bytes from 192.168.1.1: icmp_seq=7 ttl=64 time=1.90 ms
64 bytes from 192.168.1.1: icmp_seq=8 ttl=64 time=9.15 ms
64 bytes from 192.168.1.1: icmp_seq=9 ttl=64 time=1.37 ms
64 bytes from 192.168.1.1: icmp_seq=10 ttl=64 time=1.36 ms
--- 192.168.1.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 1807ms
rtt min/avg/max/mdev = 1.360/15.966/88.970/28.436 ms, ipg/ewma 200.746/11.066 ms
";
// result will be a tuple containing the start and end indices for the first match in the string
let result = regex.captures(string);
let (start, end) = match result {
Some((s, e)) => (s, e),
None => {
// ...
}
};
println!("{}", &string[start, end]);
}
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/