Ant构建脚本使用groovy和正则表达式,如何使用字符串值构建模式?

时间:2012-03-25 19:19:22

标签: regex ant groovy

如何在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>

2 个答案:

答案 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+".*"

第二个示例更灵活,因为您可以通过简单地构建字符串来添加其他正则表达式。