Go——从文件路径解析解析GAVC坐标解决方案
生活随笔
收集整理的這篇文章主要介紹了
Go——从文件路径解析解析GAVC坐标解决方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
源代碼:https://gitee.com/shentuzhigang/mini-project/tree/master/go-gavc
解決方案
正則表達式來自:Artifactory Maven倉庫初始配置
package go_gavcimport ("github.com/dlclark/regexp2""strings" )type GAVC struct {GroupId stringArtifactId stringVeriosn stringClassifier string }var gavcRe = regexp2.MustCompile("(?<orgPath>.+?)/(?<module>[^/]+)/(?<baseRev>[^/]+?)(?:-(?<folderItegRev>SNAPSHOT))?/(?<module>\\2)-(?<baseRev>\\3)(?:-(?<fileItegRev>SNAPSHOT|(?:(?:[0-9]{8}.[0-9]{6})-(?:[0-9]+))))?(?:-(?<classifier>[^/]+?))?\\.(?<ext>(?:(?!\\d))[^\\-/]+|7z)", regexp2.RE2) var jarRe = regexp2.MustCompile("(?<module>[^/]+)-(?<baseRev>[^/]+?)(?:-(?<fileItegRev>SNAPSHOT|(?:(?:[0-9]{8}.[0-9]{6})-(?:[0-9]+))))?(?:-(?<classifier>[^/]+?))?\\.(?<ext>(?:(?!\\d))[^\\-/]+|7z)", regexp2.RE2)func ResoleGAVC(path string) *GAVC {gavc := &GAVC{}ps := strings.Split(path, "/")if len(ps) >= 4 {match, err := gavcRe.FindStringMatch(path)if err == nil && match != nil {orgPath := match.GroupByName("orgPath")if orgPath != nil {gavc.GroupId = strings.ReplaceAll(orgPath.String(), "/", ".")}module := match.GroupByName("module")if module != nil {gavc.ArtifactId = module.String()}version := match.GroupByName("baseRev")if version != nil {gavc.Veriosn = version.String()}classifier := match.GroupByName("classifier")if classifier != nil {gavc.Classifier = classifier.String()}return gavc}}index := strings.LastIndex(path, "/")var name stringif index == -1 {name = pathpath = ""} else {name = path[index+1:]path = path[:index]}match, err := jarRe.FindStringMatch(name)if err == nil && match != nil {suffix := ""version := match.GroupByName("baseRev")if version != nil {gavc.Veriosn = version.String()if len(gavc.Veriosn) > 0 {suffix += "/" + version.String()}}classifier := match.GroupByName("classifier")if classifier != nil {gavc.Classifier = classifier.String()if len(gavc.Classifier) > 0 {suffix += "-" + classifier.String()}}gavc.GroupId = strings.ReplaceAll(strings.TrimSuffix(path, suffix), "/", ".")module := match.GroupByName("module")if module != nil {gavc.ArtifactId = module.String()if len(gavc.ArtifactId) > 0 {if strings.HasSuffix(path, "/"+module.String()) {gavc.GroupId = strings.ReplaceAll(strings.TrimSuffix(path, "/"+module.String()), "/", ".")} else if strings.HasSuffix(path, "/"+module.String()+suffix) {gavc.GroupId = strings.ReplaceAll(strings.TrimSuffix(path, "/"+module.String()+suffix), "/", ".")}}}if len(gavc.GroupId) == 0 {gavc.GroupId = gavc.ArtifactId}return gavc}ps = strings.Split(path, "/")if len(ps) == 1 {path = path + "//"} else if len(ps) == 2 {path = path + "/"}index1 := strings.LastIndex(path, "/")gavc.Veriosn = path[index1+1:]index2 := strings.LastIndex(path[:index1], "/")gavc.ArtifactId = path[index2+1 : index1]gavc.GroupId = strings.ReplaceAll(path[:index2], "/", ".")if len(gavc.ArtifactId) == 0 {index3 := strings.LastIndex(name, ".")if index3 != -1 {gavc.ArtifactId = name[:index3]}}return gavc }總結
以上是生活随笔為你收集整理的Go——从文件路径解析解析GAVC坐标解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker Compose——搭建Re
- 下一篇: 牛客题霸 NC19 子数组的最大累加和问