【发布时间】:2017-02-10 12:00:57
【问题描述】:
喂!
我有一个带有一个参数的 groovy 脚本。参数必须是正则表达式模式。我想在参数中使用 *,但总是得到:命令的语法不正确。
这是一个例子(opt.p 是从 arg 得到的模式):
def map1 = [e:'pine___apple', f:'pineapple']
map1.each { entry ->
entry.value.find(~/$opt.p/) { match -> println entry.value}
}
我想以这种方式从命令行使用脚本:
常规测试 -p pine_*a
我希望结果是:
松___苹果
菠萝
我尝试了这些解决方案等等,但没有任何效果: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)
【问题讨论】:
-
你为什么认为
opt.p有你的论点?您的 groovy 中是否有一些设置此变量的代码?尝试打印opt.p以查看其中包含的内容。 -
如果该值未加引号,您将受制于 shell 替换文件名。例如:
touch pine_fooled_ya; groovy test -p pine_*a。传递正则表达式最安全的方法是使用单引号:groovy test -p 'pine_*a'
标签: regex groovy command-line arguments syntax-error