我在Jenkinsfiles中使用groovy。 gradle-build创建一个如下所示的jar:appName-1.0.0-ua67435.jar
并复制到/opt/appName
在Jenkinsfile(Groovy)中,我现在想在变量中获取字符串1.0.0-ua67435
的这一部分。我希望这个正则表达式可以完成这项工作:-(.*?).jar$
我知道我的文件在哪里,但我不知道它的名字。它是.jar
- 文件夹中唯一的/opt/appName/
。
当我只知道其位置和名称模式时,如何获取文件名的子字符串?
答案 0 :(得分:1)
试试这个:
new File("/opt/appName/").eachFileMatch(FileType.FILES, ~/^.*-.*?.jar$/, { println it.name })
它使用eachFileMatch将名称与特定模式匹配,您可以从文档链接中查看更多示例。
如果不允许导入,请使用这样的完全限定名称。
...eachFileMatch(groovy.io.FileType.FILES,...
答案 1 :(得分:1)
您可以使用
def names = []
new File("/opt/appName/").eachFileMatch groovy.io.FileType.FILES, ~/(?<=appName-).*(?=[.]jar$)/, { names << it.name }
(?<=appName-).*(?=[.]jar$)
正则表达式只会在字符串末尾的appName-
和.jar
之间获取变量部分。如果您在^
之前添加appName
,则只有在文件名开头时才会匹配。
请参阅regex demo。
<强>详情
(?<=appName-)
- 确保当前位置左侧有appName
.*
- 除尽可能多的换行符之外的任何0 +字符(?=[.]jar$)
- 确保后面有.jar
子字符串,紧跟当前位置右侧的字符串位置结束。有关eachFileMatch
here的更多详情。
答案 2 :(得分:0)
您可以FileNameFinder
上课轻松找到它:
println new FileNameFinder().getFileNames(folderPath, '**/appName*.jar').collect{ it.substring(it.lastIndexOf('/')+1, it.size())}