$re = '/^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/mds';
$str = '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
';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
// Print the entire match result
var_dump($matches);
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 PHP, please visit: http://php.net/manual/en/ref.pcre.php