use strict;
my $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]
';
my $regex = qr~^\QJob started\E
(?:(?!\QJob ended\E).)+?
^\QJob executed successfully\E~mxsp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
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 Perl, please visit: http://perldoc.perl.org/perlre.html