groovy regex tokenize().grep()函数未生成预期答案

groovy regex tokenize().grep()函数未生成预期答案,regex,git,groovy,Regex,Git,Groovy,我试图使用groovy中的一些正则表达式函数从git repo中提取版本标记 def command = "\"C:/Program Files (x86)/Git/bin/sh.exe\" --login -i -c \"git ls-remote user@mysever:myproject.git refs/tags/[vV]*?.*?.*?\"" def proc = command.execute() proc.waitFor() def str = proc.in.text def

我试图使用groovy中的一些正则表达式函数从git repo中提取版本标记

def command = "\"C:/Program Files (x86)/Git/bin/sh.exe\" --login -i -c \"git ls-remote user@mysever: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]
为什么tokenize().grep()不能生成预期的答案?

我使用的是
groovy2.3.6


更新:我添加了更多测试结果,请参见代码和输出不确定原因,但您的版本
V0.0.1
实际上是一个字符
l
,而不是
1

如果您只运行以下示例(只更改了
str
),grep将正常工作:

def str = """
SHA1asdf refs/tags/V0.0.0
SHA1fdsa refs/tags/V0.0.0^{}
SHA1hgfd refs/tags/V0.0.1
SHA1dfgh refs/tags/V0.0.1^{}
"""

def pattern = ~/^refs\/tags\/[vV][0-9]+\.[0-9]+\.[0-9]+$/
System.out.println("String: $str")
System.out.println("tokenize: ${str.tokenize()}")
System.out.println("grep: " + ["refs/tags/V0.0.0", "refs/tags/V0.0.1"].grep(pattern))
System.out.println("tokenize grep: " + str.tokenize().grep(pattern))
产生

grep: [refs/tags/V0.0.0, refs/tags/V0.0.1]
tokenize grep: [refs/tags/V0.0.0, refs/tags/V0.0.1]

唷,我还以为groovy坏了呢。原来我只是一个糟糕的打字员:坑发生了,继续开槽:)