Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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 Ant使用groovy和正则表达式构建脚本,如何使用字符串值构建模式?_Regex_Ant_Groovy - Fatal编程技术网

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

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

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

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