源代码: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坐标解决方案相关推荐

  1. linux shell 文件路径 分解 解析 切分 ${str:a:b} 用法

    最近写脚本,需要对脚本中函数传递的路径参数进行截取,发现了以下比较好用的方法,记录下: file=/dir1/dir2/dir3/my.file.txt 我们可以用${ }分别替换获得不同的值: ${ ...

  2. C/C++文件路径正斜杠/和反斜杠\的使用

    文章目录 前言 总结 前言 反单斜杠\在C或C++以及C# 中是转义前导字符,例如 \n 代表换行.为了避免歧义,路径中的 \ 必须用 \\ 代替.        有时我们会看到这样的路径写法,&qu ...

  3. 文件路径 正斜杠和反斜杠

    文件路径 正斜杠和反斜杠 正斜杠,又称左斜杠,符号是"/":反斜杠,也称右斜杠,符号是"\".文件路径的表示可以分为绝对路径和相对路径: 1.绝对路径表示相对容 ...

  4. 快速容易地处理Windows、Mac 和Linux系统中文件路径问题

    作者:景略集智 链接:https://www.zhihu.com/question/48755767/answer/423475686 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

  5. c++实现解析文件路径

    注意:本实现只能解析类似linux下的路径,即"/data/a.txt",而不能解析"c:\a.txt" 或者"c:\\a.txt",但是应 ...

  6. linux 进入文件系统路径,Linux虚拟文件系统--文件路径名的解析(1)--整体过程

    注意之前传递进来的dfd为AT_FDCWD,因此path_init中只有可能出现前两种情况:1.路径以绝对路径的方式给出 2.路径以相对路径的方式给出.此时nd中的path保存了查找的起始目录,对于第 ...

  7. 利用js-xlsx.js插件实现Excel文件导入并解析Excel数据成json数据格式

    <!--本文转载于网络,有太多一样的文章,不知道原作者是哪位了,就不注明出处了.这里记载下来,用于自己的学习借鉴--><!DOCTYPE html><html lang= ...

  8. Android数据存储——2.文件存储_C_DOM解析XML文档

    今天学习Android数据存储--文件存储_DOM解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效 ...

  9. nginx 上传文件漏洞_nginx解析漏洞复现

    nginx解析漏洞复现 一.漏洞描述 该漏洞与nginx.php版本无关,属于用户配置不当造成的解析漏洞 二.漏洞原理 1. 由于nginx.conf的如下配置导致nginx把以'.php'结尾的文件 ...

最新文章

  1. 不以英语为中心,百种语言互译,FB开源首个单一多语言MT模型
  2. 成功的产品 = 做得好 + 卖得好
  3. 怎么挪动_你真的懂iPhone上的小圆点怎么玩吗
  4. python echo服务器_python常用框架 echo server 的测试
  5. 二进制编译安装mysql_数据库(MySQL)二进制安装+编译安装 + MariaDB编译安装
  6. mysql索引命名规范_mysql使用规范-索引规范
  7. Visual Studio 2010 调试 C 语言程序
  8. python中协程的理解_python协程的理解
  9. Fence Repair (poj3253)
  10. 口译务实——unit10 II
  11. CSS 常用开发技巧
  12. java webservice 实例
  13. JST日本压着端子GHD系列线对板连接器PCB封装库(1.25mm间距)
  14. Linux上几款好用的字幕编辑器
  15. 单片机外围电路设计之一:电阻
  16. 如果不想当程序员,学编程有什么用?答案显而易见!
  17. Chapter 8 中医证型关联规则挖掘
  18. linux gif录制工具,Linux下的GIF录制
  19. 服务器虚拟化技术主要有什么优势
  20. Ubuntu下安装 rust和urdf-viz

热门文章

  1. java 跨域上传_java使用webuploader实现跨域上传详解
  2. 计算机组成原理实验箱使能开关,计算机组成原理微程序计数器实验报告
  3. 把html变成桌面的软件,5 分钟把任意网站变成桌面软件
  4. mysql page校验_MySQL InnoDB离线校验工具innochecksum使用
  5. apache arm 交叉编译_arm apache php交叉编译
  6. 提取点的dn值_干货在线 | DEM数据如何生成高程点
  7. 对话系统(二)-普通神经网络
  8. mac 上搭建gitlabel_在Mac OS X中用Docker部署GitLab
  9. 清华大学计算机组成原理视频百度云,计算机组成原理第48讲:
  10. matlab 叠加 area,[转载]matlab学习——area填色图