in src/shared/ArtifactPackage.cs [32:58]
public static bool FromUrl(string url, out ArtifactPackage artifactPackage) =>
FromFilenameOrUrl(Path.GetFileName(url), url, out artifactPackage);
public static bool FromFilename(string fileName, out ArtifactPackage artifactPackage) =>
FromFilenameOrUrl(fileName, null, out artifactPackage);
static readonly Regex rx = new Regex(
/* 0 full capture, 7 groups total */
/* 1 */ @$"(?<target>[^-]+({MagicStrings.Files.DashOssSuffix})?)" +
/* 2 */ @$"-(?<version>\d+\.\d+\.\d+(?:\+build\d+)?)" +
/* 3 */ @$"(-(?<qualifier>(?!\b(?:{MagicStrings.Ver.Snapshot})\b)[^-]+))?" +
/* 4 */ @$"(-(?<snapshot>{MagicStrings.Ver.Snapshot}))?" +
/* 5 */ @$"-(?<os>[^-]+)" +
/* 6 */ @$"-(?<arch>[^\.]+)",
RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.IgnoreCase);
static bool FromFilenameOrUrl(string fileName, string url, out ArtifactPackage artifactPackage)
{
artifactPackage = null;
var rxVersion = rx.Match(fileName);
if (rxVersion.Groups.Count < 7)
return false;
artifactPackage = new ArtifactPackage(rxVersion.Groups, fileName, url);
return true;
}