package main
import (
"regexp"
"fmt"
)
func main() {
var re = regexp.MustCompile(`(?m)^(?<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})`)
var 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`
for i, match := range re.FindAllString(str, -1) {
fmt.Println(match, "found at index", i)
}
}
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 Golang, please visit: https://golang.org/pkg/regexp/