$re = '/^Job started at\s\'(\d+\s\d+:\d+:\d+:\d+)\'\s+orderno\s+-\s+\'(\w+)\'\s+runno\s+-\s+\'(\d+)\'[\s\S]+?Host1\s\'([\w.]+)\'\[([\w-]+)\] username \'([\w\\\\]+)\' - Host2\s\'([\w.]+)\'\[([\w-]+?)\] username \'([\w\\\\]+)\'[\s\S]+?(?:(Job executed successfully)[\s\S]+?)?Job ended at\s\'(\d+\s\d+:\d+:\d+:\d+)\'\s+Elapsed time\s\[([\d.]+)sec\]\sCPU usage\s\[([\d.]+)sec]/m';
$str = 'Job started at \'0902 23:56:00:367\' orderno - \'0tzh0\' runno - \'00064\' Number of transfers - 1
Host1 \'Local\'[Windows-LOCAL] username \'xxx\\xxx\' - Host2 \'xxx.xxx.xx\'[Unix-SFTP] username \'xxx\'
Local host is: xxx - Windows 200x [601] Service Pack 1 build 7601 - Intel64 Family 6 Model 37 Stepping 1, GenuineIntel
********** Starting transfer #1 out of 1 *************** Transfer #1 completed successfully
Job executed successfully. exiting.
Job ended at \'0902 23:56:07:138\' Elapsed time [7sec] CPU usage [0.15sec]';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 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