如何在groovy中使用字符串值作为正则表达式的一部分? 我正在使用groovy编写ant构建脚本,这里有一些快照:
<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>
答案 0 :(得分:1)
应该是:
/.*${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>
我可以这样做:
ant groovy.showProperties
我得到了输出:
Buildfile: /Users/tim/Code/test/build.xml
groovy.showProperties:
[echo] example:
[dump] user.language=en
BUILD SUCCESSFUL
Total time: 1 second
没有解析错误或任何内容......您使用的是什么版本的Groovy?
答案 1 :(得分:0)
我最终找到了解决方案:
在这个简单的例子中就足够了:
prop.key =~ nameMatch
然而,更通用的方法是:
prop.key ==~ ".*"+nameMatch+".*"
第二个示例更灵活,因为您可以通过简单地构建字符串来添加其他正则表达式。