regex - 如何在Groovy的命令行参数中使用星号(*)?

标签 regex groovy command-line arguments syntax-error

喂!

我有一个带有一个参数的普通脚本。该参数必须是正则表达式模式。我想在参数中使用*,但总是得到:该命令的语法不正确。

这是一个示例(opt.p是从arg获取的模式):

    def map1 = [e:'pine___apple', f:'pineapple']
    map1.each { entry ->
                entry.value.find(~/$opt.p/) { match -> println entry.value}
                }

我想通过这种方式从命令行使用脚本:

groovy test -p pine_*a



我希望结果将是:

pine___apple
pineapple



我尝试了这些解决方案等等,但没有任何效果:pine_*a"pine_*a"'pine_*a'pine_\*a'pine_\*a'"pine_\*a"pine_'\*'apine_"\*"apine_'\\*'apine_"\\*"a
有人知道如何解决此问题?
非常感谢!


编辑:
我用:
Groovy版本:2.4.6 JVM:1.7.0_45供应商:Oracle Corporation操作系统:Windows 7我也使用CliBuilder:
def cli = new CliBuilder()
        cli.with
        {
            p('pattern', args: 1, required: false)
        }   
        def opt = cli.parse(args)

最佳答案

下面的常规脚本:

def map = [e:'pine___apple', f:'pineapple']
map.each { k, v ->
  v.find(~/${args[0]}/) { println "key: $k, value: $v -> ${v.find(args[0])}" }
}

在调用时输出以下内容:
$ groovy test.groovy pine_*a
Checking key: e, value: pine___apple -> pine___a
Checking key: f, value: pineapple -> pinea

或排除以下 map 条目之一:
$ groovy test.groovy "pine_{1,9}a"
key: e, value: pine___apple -> pine___a

不确定脚本的问题是什么。也许像其中一项评论所建议的那样处理opts.p。

编辑1 :

Tim Yates在回答中提到的一种替代的CliBuilder语法:
def opt = new CliBuilder().with {
    p longOpt: 'pattern', args: 1
    parse(args)
} 

编辑2:解决方案

因为这被标记为可接受的答案,所以我将在此处添加最终的解决方案(我在下面对此发表了评论,但是在浏览该解决方案时,评论不会立即显而易见)。

此问题是由用于启动groovy的Windows groovy分发startgroovy.bat文件(see separate stackoverflow thread)中的错误引起的。问题出在Windows执行和参数处理上,它出现在Groovy程序甚至开始执行之前。很有可能已在groovy的更高版本中对此进行了修复,因此可能值得尝试升级至最新版本。如果没有,上述线程中的答案应该可以修复startgroovy.bat

关于regex - 如何在Groovy的命令行参数中使用星号(*)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42158907/

相关文章:

bash - 如何使用 bash 脚本重命名当前目录及其子目录中的文件?

python - 如何在 pandas DataFrame 中查找与正则表达式匹配的实际唯一值

java - 删除两个字符之间的子字符串(java)

java - 将for循环的结果写入groovy中的csv

grails - 尝试将 GPar 与 IntelliJ 和 grails 一起使用

groovy - 'sourceSets.all*'是什么意思

git - 有没有办法在命令行上报告 git 贡献?

python - 如何在python中用正则表达式替换为小写

java - 使用 java.regex 从字符串中删除字符

visual-studio-2010 - Visual Studio 预生成事件 : Batch File Exit Code is -1