0
我试图从groovy中使用一些正则表达式函数从git仓库中提取版本标签。groovy正则表达式tokenize()。grep()函数没有产生预期的答案
def command = "\"C:/Program Files (x86)/Git/bin/sh.exe\" --login -i -c \"git ls-remote [email protected]:myproject.git refs/tags/[vV]*?.*?.*?\""
def proc = command.execute()
proc.waitFor()
def str = proc.in.text
def pattern = ~/^refs\/tags\/[vV][0-9]+\.[0-9]+\.[0-9]+$/
System.out.println("is everything a string? " + str.tokenize().every{ it instanceof String })
System.out.println("String: $str")
System.out.println("split: ${str.split()}")
System.out.println("contains refs/tags/V0.0.0?: ${str.split()*.trim().contains('refs/tags/V0.0.0')}")
System.out.println("contains refs/tags/V0.0.1?: ${str.split()*.trim().contains('refs/tags/V0.0.1')}")
System.out.println("grep: " + ['refs/tags/V0.0.0', 'refs/tags/V0.0.1'].grep(pattern))
System.out.println("split grep: " + str.split().grep(pattern))
System.out.println("split findAll: " + str.split().findAll{ it =~ pattern })
而且我的输出是这样的:
String: SHA1asdf refs/tags/V0.0.0
SHA1fdsa refs/tags/V0.0.0^{}
SHA1hgfd refs/tags/V0.0.l
SHA1dfgh refs/tags/V0.0.l^{}
split: [SHA1asdf, refs/tags/V0.0.0, SHA1asdf, refs/tags/V0.0.0^{}, SHA1hgfd, refs/tags/V0.0.l, SHA1dfgh, refs/tags/V0.0.l^{}]
contains refs/tags/V0.0.0?: true
contains refs/tags/V0.0.1?: false
grep: [refs/tags/V0.0.0, refs/tags/V0.0.1]
split grep: [refs/tags/V0.0.0]
split findAll: [refs/tags/V0.0.0]
为什么不是令牌化()的grep()产生预期的答案?
我使用Groovy 2.3.6
更新:我添加了更多的测试结果,看到代码和输出
呼,我想常规被打破。原来,我只是一个坏typer:P – coderatchet 2014-09-04 06:40:31
它发生,继续开槽:) – kunal 2014-09-04 06:42:24