-1

我正在尝试解码一些 groovy 脚本。我能够弄清楚它是一个正则表达式,但无法弄清楚代码到底是什么。

def dirNumber = this.'Directory Number'
dirNumber?"61" + (dirNumber =~ /0([0-9]+)/)[0][1] + "@":null
4

1 回答 1

0

根据https://groovy-lang.org/operators.html的正则表达式运算符部分,是find 运算符,它在右侧创建一个for 模式,将它们与左侧的字符串匹配。因此,等价于 并计算为 的实例。=~java.util.regex.MatcherdirNumber =~ /0([0-9]+)/Pattern.compile("/0([0-9]+)/").matcher(dirNumber)java.util.regex.Matcher

Groovy 使您能够通过索引([0]在您的代码中)访问匹配项;您的正则表达式使用grouping,因此在每个匹配项中,您也可以通过(1-based:0 表示整个模式)索引([1]在您的代码中)访问组。

因此,您的代码(如果dirNumber不是null)提取正则表达式的第一个匹配项的第一组。

// 已编辑

IndexOutOfBoundsException当第一个索引([0]在您的代码中)超出匹配范围时,您可以获得一个;当您的第二个索引([1]在您的代码中)在 grous 范围内时,您将null毫无例外地通过索引访问组...

您可以使用上述代码的简化版本来测试这些场景:

def dirNumber = "Xxx 15 Xxx 16 Xxx 17"
def matcher = dirNumber =~ /Xxx ([0-9]+)/
println(matcher[0][1]) // 15
println(matcher[0][5]) // null 
println(matcher[5][1]) // IndexOutOfBoundsException 
于 2019-09-12T09:39:58.550 回答