use strict;
my $str = '2. Match all the dates in the following text, and label each date accordingly
Sent: 01/20/2023 at 10:00 AM (label: Sent)
To: Manuel
Don’t forget our meeting on Saturday, January 23, 2023 (label: Meeting), to discuss the following
schedules:
2023-01-27 - Unlocking the Secrets of RegEx: Learn to Match Patterns (label: Class1)
2023-01-28 - Unleashing the Potential of RegEx: Advanced Techniques (label: Class2)
2023-01-29 - Make and RegEx: Powering Up Your Automation Workflows (label: Class3)';
my $regex = qr/(?:(?<dateShort>\d\d\/\d\d\/\d{4})|(?<dateLong>\w* \d\d, \d{4})|(?<dateISO>\d{4}-\d\d-\d\d)).*label:\s(?<label>\w*)\)/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