Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Groovy仅在知道路径的情况下获取具有特定结尾的文件名_Regex_Groovy - Fatal编程技术网

Regex Groovy仅在知道路径的情况下获取具有特定结尾的文件名

Regex Groovy仅在知道路径的情况下获取具有特定结尾的文件名,regex,groovy,Regex,Groovy,我在Jenkins文件中使用groovy。gradle构建创建了一个如下所示的jar:appName-1.0.0-ua67435.jar,并复制到/opt/appName 在Jenkinsfile(Groovy)中,我现在希望将字符串的这一部分1.0.0-ua67435放在变量中。我希望这个正则表达式能够完成这项工作:-(.*).jar$ 我知道我的文件在哪里,但我不知道它的名字。它是/opt/appName/-文件夹中唯一的.jar 当我只知道文件名的位置和名称模式时,如何获取文件名的子字符串

我在Jenkins文件中使用groovy。gradle构建创建了一个如下所示的jar:
appName-1.0.0-ua67435.jar
,并复制到
/opt/appName

在Jenkinsfile(Groovy)中,我现在希望将字符串的这一部分
1.0.0-ua67435
放在变量中。我希望这个正则表达式能够完成这项工作:
-(.*).jar$

我知道我的文件在哪里,但我不知道它的名字。它是
/opt/appName/
-文件夹中唯一的
.jar

当我只知道文件名的位置和名称模式时,如何获取文件名的子字符串?

试试以下方法:

new File("/opt/appName/").eachFileMatch(FileType.FILES, ~/^.*-.*?.jar$/, { println it.name })
它用于将名称与特定模式匹配,您可以从文档链接中看到更多示例


如果不允许导入,则使用这样的完整限定名

…每个文件匹配(groovy.io.FileType.FILES,…

尝试以下操作:

new File("/opt/appName/").eachFileMatch(FileType.FILES, ~/^.*-.*?.jar$/, { println it.name })
它用于将名称与特定模式匹配,您可以从文档链接中看到更多示例


如果不允许导入,则使用这样的完整限定名

…每个文件匹配(groovy.io.FileType.FILES,…

您可以使用

def names = []
new File("/opt/appName/").eachFileMatch groovy.io.FileType.FILES, ~/(?<=appName-).*(?=[.]jar$)/, { names << it.name }
def name=[]
新文件(“/opt/appName/”)。每个文件匹配groovy.io.FileType.FILES,~/(?您可以使用

def names = []
new File("/opt/appName/").eachFileMatch groovy.io.FileType.FILES, ~/(?<=appName-).*(?=[.]jar$)/, { names << it.name }
def name=[]

新文件(“/opt/appName/”)。每个文件匹配groovy.io.FileType.FILES,~/(?您可以
FileNameFinder
类轻松找到它:

println new FileNameFinder().getFileNames(folderPath, '**/appName*.jar').collect{ it.substring(it.lastIndexOf('/')+1, it.size())}

您可以
FileNameFinder
class轻松找到它:

println new FileNameFinder().getFileNames(folderPath, '**/appName*.jar').collect{ it.substring(it.lastIndexOf('/')+1, it.size())}


你的意思是想从字符串
/opt/appName/appName-1.0.0-ua67435.jar
中获取字符串
appName-1.0.0-ua67435.jar
?是的,但不知道
appName-************************.jar
的确切名称。我只喜欢未知部分。你可以检查答案。你的意思是想获取字符串
appName-1.0.0-ua67435.jar
来自字符串
/opt/appName/appName-1.0.0-ua67435.jar
?是的,但不知道
appName-************************.jar的确切名称。我更喜欢未知部分,但仅限于此。您可以检查答案。如何在变量中获取该名称?@SWiggels
它。name
是您想要的名称。我在导入FileType.FILE时遇到问题jenkins似乎甚至不喜欢导入。
import static groovy.io.FileType.FILES新文件($destDir”).eachFileMatch(FileType.FILES,~/^.*-.*?.jar$/,{println It.name})
导致
groovy.lang.MissingPropertyException:没有这样的属性:类的文件类型:groovy.lang.Binding
好的,我得到了解决方案。也非常感谢@Wiktor!问题是,在运行脚本时,它要求批准。在它说它没有权限之后,我不得不另一次批准其他方法。我必须这样做3次mes在一行中。谢谢大家!我如何在变量中获得该名称?@SWiggels
it.name
是您想要的名称。我在FileType.FILES中遇到导入问题。詹金斯似乎甚至不喜欢导入。
import static groovy.io.FileType.FILES新文件($destDir”).eachFileMatch(FileType.FILES,~/^.-.*jar$/,{println it.name})
导致
groovy.lang.MissingPropertyException:没有这样的属性:类的文件类型:groovy.lang.Binding
好的,我得到了解决方案。也非常感谢@Wiktor!问题是,在运行脚本时,它要求批准。在它说它没有权限之后,我不得不另一次批准其他方法。我必须这样做3次mes排成一行。谢谢大家!Jenkins不允许静态导入。另外,
baseDir
是未知的。@SWiggels这是文档中的一个示例片段。我刚刚更改了那里的正则表达式。
baseDir
应该用
“/opt/appName/”初始化
,当然。
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:不允许使用staticMethod的脚本
是我从运行它中得到的。按照Aristtl建议的方式尝试。Aristtls版本也需要导入。因此它也不起作用。:(Jenkins不允许静态导入。另外,
baseDir
是未知的。@SWiggels这是文档中的一个示例片段。我刚刚在那里更改了正则表达式。
baseDir
应该用
“/opt/appName/”初始化
,当然。
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:不允许使用staticMethod的脚本
是我从运行它中得到的。按照Aristtl建议的方式尝试。Aristtls版本也需要导入。因此它也不起作用。:(如果您使用从机,则在管道中使用
FileNameFinder
是危险的。带有文件的所有内容仅在主机上执行。如果您使用从机,请参阅在管道中使用
FileNameFinder
是危险的。带有文件的所有内容仅在主机上执行。请参阅