$re = '~^\QJob started\E
(?:(?!\QJob ended\E).)+?
^\QJob executed successfully\E~mxs';
$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]
Job started at \'0831 15:26:00:365\' orderno - \'0tuq5\' runno - \'00030\' Number of transfers - 4
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 4 *************** Unable to connect to SSH server on \'xxx.xxx.xx\': SFTP_Connect : psftp_connect failed : ssh_init: Network error: Connection timed out .
Connection to host sftp.onenet.be could not be established
Job ended at \'0831 15:26:21:426\'
Elapsed time [21sec] CPU usage [0.0sec]
';
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