use strict;
my $str = 'cloud-csm-6.4.13-20210927-89fa91ca.lnx.x86_64.zip
cams-7.2.4+4.20211216.zip
cams-7.2.4-alpha+4.20211216.zip
cca-6.4.23+753.20211216.193a0386-1.noarch.rpm
cca-6.4.23+alpha+753.20211216.193a0386-1.noarch.rpm
cca-6.4.23-alpha+753.20211216.193a0386.zip
cca_6.4.23+753.20211216.193a0386-1_all.deb
ci-j2ee-6.4.23+790.20211216.193a0386.zip
ci-j2ee-6.4.23-alpha+790.20211216.193a0386.zip
ci-server-6.4.23+790.20211216.193a0386.zip
ci-server-6.4.23-alpha+790.20211216.193a0386.zip
cloud-ci-7.1.15+90.20210119.46eef7d3-1.noarch.rpm
cloud-ci-7.2.4+247.20211216.eba3915b.noarch.zip
cloud-ci-7.2.4+alpha+247.20211216.eba3915b-1.noarch.RPM
cloud-ci-7.2.4-alpha+247.20211216.eba3915b.noarch.zip
cloud-cm-7.2.4+246.20211216.eba3915b-1.noarch.rpm
cloud-cm-7.2.4+246.20211216.eba3915b.noarch.zip
cloud-cm-7.2.4+alpha+246.20211216.eba3915b-1.noarch.rpm
cloud-cm-7.2.4-alpha+246.20211216.eba3915b.noarch.zip
cloud-csd-7.2.4+241.20211216.eba3915b-1.x86_64.rpm
cloud-csd-7.2.4+241.20211216.eba3915b.1-sym-x86_64.rpm
cloud-csd-7.2.4+241.20211216.eba3915b.lnx.x86_64.zip
cloud-csd-7.2.4+241.20211216.eba3915b.sym.lnx.x86_64.zip
cloud-csd-7.2.4+alpha+241.20211216.eba3915b-1.x86_64.rpm
cloud-csd-7.2.4+alpha+241.20211216.eba3915b.1-sym-x86_64.rpm
cloud-csd-7.2.4-alpha+241.20211216.eba3915b.lnx.x86_64.zip
cloud-csd-7.2.4-alpha+241.20211216.eba3915b.sym.lnx.x86_64.zip
cloud-csm-6.4.13-20210927-89fa91ca.lnx.x86_64.zip
cloud-csm-6.4.13-20210927-89fa91ca.win.x86.zip
cloud-cst-7.2.4+241.20211216.eba3915b-1.x86_64.rpm
cloud-cst-7.2.4+241.20211216.eba3915b.1-sym-x86_64.rpm
cloud-cst-7.2.4+241.20211216.eba3915b.lnx.x86_64.zip
cloud-cst-7.2.4+241.20211216.eba3915b.sym.lnx.x86_64.zip
cloud-cst-7.2.4+alpha+241.20211216.eba3915b-1.x86_64.rpm
cloud-cst-7.2.4+alpha+241.20211216.eba3915b.1-sym-x86_64.rpm
cloud-cst-7.2.4-alpha+241.20211216.eba3915b.lnx.x86_64.zip
cloud-cst-7.2.4-alpha+241.20211216.eba3915b.sym.lnx.x86_64.zip
cloud-parts-7.2.4-20211216.zip
cloud-parts-7.2.4-alpha-20211216.zip
cloud-xds-6.4.6-20211101-4b76a168.lnx.x86.zip
cloud-xds-6.4.6-20211101-4b76a168.win.x86.zip
cm-6.4.23+798.20211216.193a0386-1.noarch.rpm
cm-6.4.23+alpha+798.20211216.193a0386-1.noarch.rpm
cm-6.4.23-alpha+798.20211216.193a0386.zip
cm_6.4.23+798.20211216.193a0386-1_all.deb
cm_6.4.23+alpha+798.20211216.193a0386-1_all.deb
csm-6.4.13-20210927-89fa91ca.lnx.x86_64.tar
csm-6.4.13-20210927-89fa91ca.win.x86.zip
dbconfig-7.2.4+231.20211216.eba3915b.zip
dbconfig-7.2.4-alpha+231.20211216.eba3915b.zip
xds-6.4.6-20211101-4b76a168.lnx.x86.tar
xds-6.4.6-20211101-4b76a168.win.x86.zip';
my $regex = qr/^(?<type>(?:ci-|cloud-)?[^-]+)[_-](?<version>\d+\.\d+\.\d+)(?<alpha>[-+]alpha)?(?:-(?<date>\d{8}))?[-+](?:(?<build>\d+).(?<builddate>\d{8}))?(?:[.-]?(?<sha>[A-Fa-f0-9]+(?:[.-]\d+)?))?(?:\.(?<arch>.+))?\.(?<fmt>.{3})/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