Regex Ant使用groovy和正则表达式构建脚本,如何使用字符串值构建模式?
如何在groovy中将字符串值用作正则表达式的一部分? 我正在使用groovy编写ant构建脚本,下面是一些快照:Regex Ant使用groovy和正则表达式构建脚本,如何使用字符串值构建模式?,regex,ant,groovy,Regex,Ant,Groovy,如何在groovy中将字符串值用作正则表达式的一部分? 我正在使用groovy编写ant构建脚本,下面是一些快照: <target name="groovy.showProperties"> <groovy> class ShowProperties extends org.apache.tools.ant.Task { String nameMatch; public void execut
<target name="groovy.showProperties">
<groovy>
class ShowProperties extends org.apache.tools.ant.Task {
String nameMatch;
public void execute() {
project.properties.each
{prop ->
//I don't know how to obtain nameMatch value
if(prop.key ==~ /.*nameMatch.*/)
{
println prop;
}
};
}
}
project.addTaskDefinition('dump', ShowProperties)
</groovy>
<echo>example:</echo>
<dump nameMatch="lang"/>
</target>
类ShowProperties扩展org.apache.tools.ant.Task{
字符串名称匹配;
public void execute(){
project.properties.each
{prop->
//我不知道如何获得nameMatch值
如果(prop.key==~/.*名称匹配。*/)
{
println-prop;
}
};
}
}
project.addTaskDefinition('dump',ShowProperties)
例子:
它应该是:
/.*${nameMatch}.*/
那不行吗
编辑:
以您的示例任务为例,将其包装为有效的build.xml
,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ItWorks" basedir=".">
<property environment="env"/>
<path id="lib.path">
<fileset dir="${env.GROOVY_HOME}">
<include name="lib/*.jar"/>
</fileset>
</path>
<taskdef name="groovy"
classname="org.codehaus.groovy.ant.Groovy"
classpathref="lib.path"/>
<target name="groovy.showProperties">
<groovy>
class ShowProperties extends org.apache.tools.ant.Task {
String nameMatch;
public void execute() {
project.properties.each { prop ->
if( prop.key ==~ /.*${nameMatch}.*/ ) {
println prop
}
}
}
}
project.addTaskDefinition('dump', ShowProperties)
</groovy>
<echo>example:</echo>
<dump nameMatch="lang"/>
</target>
</project>
我得到了输出:
Buildfile: /Users/tim/Code/test/build.xml
groovy.showProperties:
[echo] example:
[dump] user.language=en
BUILD SUCCESSFUL
Total time: 1 second
没有解析错误或任何东西。。。您使用的是什么版本的Groovy?我最终找到了解决方案: 在这个简单的例子中,足够的是:
prop.key =~ nameMatch
然而,更通用的方法是:
prop.key ==~ ".*"+nameMatch+".*"
第二个示例更灵活,因为您可以通过简单地构建字符串来添加其他正则表达式 不,它不起作用。我以前尝试过这个,但它给出了parse error.BUILD失败E:\java\ant scripting\BUILD.xml:160:groovy.lang.MissingMethodException:没有方法的签名:ShowProperties。$()适用于参数类型:(ShowProperties$\u execute\u closure2\u closure3)值:[ShowProperties$\u execute\u closure2]_closure3@242bf982]我认为不能在groovy标记中混合使用ant语法。我在上面添加了工作答案,无论如何,谢谢您的帮助。@0lukasz0对……试过了,效果如预期。编辑我的答案以显示我做了什么,以及结果…谢谢你的帮助。显然,我把'prop.key==~“*”+nameMatch+“*”'语法和'/.*${nameMatch}.*./'语法混在一起了,这是行不通的。不过,这里的'prop.key=~nameMatch'看起来是最简单的解决方案,所以我也会保留我的答案。
prop.key ==~ ".*"+nameMatch+".*"