use strict;
my $str = '* * * * * *
* * * * * *
* * * * * *
3 * * * * *
3 * * * * *
3 * * * * *
3 * * * * *
3 * * * * *
5/15 * * * * *
5/15 * * * * *
5/15 * * * * *
5/15 * * * * *
5/15 * * * * *
7,19 * * * * *
7,19 * * * * *
7,19 * * * * *
2-45 * * * * *
2-4 * * * * *
42-45 * * * * *
42-45 * * * * *
42-45 * * * * *
42-45 * * * * *
42-63 * * * * *
0 3 * * * *
0 3 * * * *
0 0/15 * * * *
0 0/15 * * * *
0 0/15 * * * *
0 0/15 * * * *
0 7,19 * * * *
0 7,19 * * * *
0 * 3 * * *
0 * 3 * * *
0 * 3 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 0/15 * * *
0 * 7,19 * * *
0 * 7,19 * * *
0 * 7,19 * * *
0 1 * * * *
0 0 * * * *
0 * * 3 * *
0 * * 3 * *
0 * * 3 * *
0 * * 3 * *
0 0 0 1/15 * *
0 0 0 1/15 * *
0 0 0 1/15 * *
0 0 0 1/15 * *
0 0 0 7,19 * *
0 0 0 7,19 * *
0 0 0 7,19 * *
0 0 0 7,19 * *
0 0 0 L * *
0 0 0 L * *
0 0 0 3L * *
0 0 0 3L * *
0 0 0 9W * *
0 0 0 9W * *
0 0 0 9W * *
0 0 0 9W * *
0 0 0 9X */2 *
0 0 0 9#2 * *
0 0 0 1 5 *
0 0 0 1 5/2 *
0 0 0 1 5/2 *
0 0 0 1 5/10 *
0 0 0 1 3,7,12 *
0 0 0 1 3,7,12 *
0 0 0 1 3,7,12 *
0 0 0 1 MAR,JUL,DEC *
0 0 0 1 MAR,JUL,DEC *
0 0 0 1 MAR,JUL,DEC *
0 0 0 1 ? *
0 0 0 * * 3
0 0 0 * * 3
0 0 0 * * 3
0 0 0 * * 3
0 0 0 * * 3/2
0 0 0 * * 3/2
0 0 0 * * 3/2
0 0 0 * * 3/2
0 0 0 * * 1,5,7
0 0 0 * * 1,5,7
0 0 0 * * 1,5,7
0 0 0 * * MON,FRI,SUN
0 0 0 * * MON,FRI,SUN
0 0 0 * * MON,FRI,SUN
0 0 0 * * 5L
0 0 0 * * 5L
0 0 0 * * 5L
0 0 0 * * FRIL
0 0 0 * * 5W
0 0 0 * * 5?3
0 0 0 * * 0
0 0 0 * * 0L
0 0 0 * * 0#2
0 0 0 * * 7
0 0 0 * * 7L
0 0 0 * * 7#2
0 0 0 * * 5#3
0 0 0 * * 5#3
0 0 0 * * 7#1
0 0 0 * * 7#1
0 0 0 * * 3#5
0 0 0 * * WED#5
* * 5-1 * * *';
my $regex = qr/^(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?))(,(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?)))*\s(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?))(,(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?)))*\s(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?))(,(((\*|(\d\d?))(\/\d\d?)?)|(\d\d?\-\d\d?)))*\s(\?|(((\*|(\d\d?L?))(\/\d\d?)?)|(\d\d?L?\-\d\d?L?)|L|(\d\d?W))(,(((\*|(\d\d?L?))(\/\d\d?)?)|(\d\d?L?\-\d\d?L?)|L|(\d\d?W)))*)\s(((\*|(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))(\/\d\d?)?)|((\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\-(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)))(,(((\*|(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))(\/\d\d?)?)|((\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\-(\d|10|11|12|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))))*\s(((\*|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)(\/\d\d?)?)|(([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?\-([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?#([1-5]))(,(((\*|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)(\/\d\d?)?)|(([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?\-([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?)|([0-7]|MON|TUE|WED|THU|FRI|SAT|SUN)L?#([1-5])))*$/mip;
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