Groovy 使用正则表达式筛选文件名

Groovy 使用正则表达式筛选文件名,groovy,gradle,Groovy,Gradle,我想知道,是否有更简单的“Gradle-like”方法,如何列出目录中的文件,但只列出那些匹配正则表达式的文件。目前,我的解决方案是这样的 File fileList = file("${moduleDir}/target") // pattern for maven artifact def pattern = ~"^.*-[0-9]\\.[0-9]\\.[0-9](-SNAPSHOT)?\\.jar\$" fileList.listFiles().each { file ->

我想知道,是否有更简单的“Gradle-like”方法,如何列出目录中的文件,但只列出那些匹配正则表达式的文件。目前,我的解决方案是这样的

File fileList = file("${moduleDir}/target")
// pattern for maven artifact
def pattern = ~"^.*-[0-9]\\.[0-9]\\.[0-9](-SNAPSHOT)?\\.jar\$"
fileList.listFiles().each { file ->
    if (file.isFile()) {
        if (pattern.matcher(file.getName())) {
            copy {
                from file.getPath()
                into targetDir
            }
        }
    }
}
我要寻找的是,完全绕过手动模式匹配。你知道有什么方法可以帮我做到这一点吗?谢谢

我要寻找的是,完全绕过手动模式匹配

不太清楚您的意思,因为您显然希望匹配自定义模式。在任何情况下,我都会使用
Copy
任务而不是
Copy
方法,并在复制操作的“内部”进行过滤。比如:

task copyArtifacts(type: Copy) {       
    from(fileTree(fileList).files) { // flattening
        include {
            it.file.name ==~ "^.*-[0-9]\\.[0-9]\\.[0-9](-SNAPSHOT)?\\.jar\$"
        }
    }
    into targetDir
}

附言:这些是你自己的作品吗?我这样问是因为一般来说,Maven工件可以使用几乎任何版本号格式。

谢谢Peter,操作数==~是我一直在寻找的。我觉得在文档中忽略它是愚蠢的。据我所知,提供的正则表达式应该匹配所有maven工件(显然我知道的很少:)。我从来没有遇到过不遵守这个惯例的神器。但感谢您指出这一点,我将更深入地了解maven工件(和Nexus存储库)。一些与您的模式不匹配的真实示例:
1.0
0.12.1
1.0.0-beta-1
1.0.0.发布版
。当然,这不是一个详尽的清单。要匹配这样的版本,您的模式需要不那么严格。顺便说一句,有没有一种方法,如何打印与'it.file.name==…'结构匹配的文件?使用Groovy这样的通用语言,这样的事情总是可能的。您可以使用普通的Groovy代码,或者像
Copy.eachFile
task。。。{…每个文件{println it.file}}
。当面对这样的问题时,是一个很好的开始(例如,检查
复制任务的文档)。我认为值得一提的是
=~
是一个标准的Groovy操作符。