![](/img/trans.png)
[英]How can i ignore a character at start/end of the match, i am like tryin to find command-line arguments
[英]How can i use asterisk(*) in command line arguments in 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_'\\*'a
pine_"\\*"a
pine_'\\\\*'a
pine_"\\\\*"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
或排除以下地图条目之一:
$ 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
文件中的错误引起的( 请参阅单独的stackoverflow线程 )。 问题出在Windows执行和参数处理上,它出现在Groovy程序甚至开始执行之前。 很有可能在groovy的更高版本中已修复了该问题,因此值得尝试升级到最新版本。 如果没有,上述线程中的答案应该可以修复startgroovy.bat
。
认为这是您捕获opt
我假设您正在使用CliBuilder
而且我怀疑您错过了args: 1
p
参数定义中的args: 1
def opt = new CliBuilder().with {
it.p('pattern', args: 1)
parse(args)
}
def map1 = [e:'pine___apple', f:'pineapple']
map1.each { entry ->
entry.value.find(~/$opt.p/) { match -> println entry.value}
}
就像您描述的那样对我有效...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.