use strict;
my $str = 'PostgreSQL 12.6, Aurora PostgreSQL release 4.1 (Deprecated on July 15, 2022)
PostgreSQL 12.4, Aurora PostgreSQL release 4.0 (Deprecated on July 15, 2022)
Aurora PostgreSQL release 14.3.1, July 6, 2022
PostgreSQL 9.6.8, Aurora PostgreSQL release 1.2 (Deprecated on October 28, 2021)
PostgreSQL 9.6.8, Aurora PostgreSQL release 1.2.4
PostgreSQL 14.5, Aurora PostgreSQL release 1.2
Aurora PostgreSQL release 14.3.1, Deprecated on October 28, 2021)';
my $regex = qr/(PostgreSQL (?P<psql_major>\d{1,2})\.(?P<psql_minor>\d{1,2})(?P<psql_opt_patch>\.\d{1,2})?, )?Aurora PostgreSQL release (?P<aurora_psql_major>\d{1,2})\.(?P<aurora_psql_minor>\d{1,2})(?P<aurora_psql_opt_patch>\.\d{1,2})?(?P<release_or_deprecation>\,\s(?P<release_data>.*)|\s\(Deprecated on (?P<deprecation_date>.*)\))?/mp;
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