检查存在多少个正则表达式匹配组,然后使用它们

时间:2019-02-22 23:52:16

标签: groovy jenkins-groovy

我正在寻找在Groovy中匹配正则表达式的方法,检查返回了多少组,然后使用这些组之一,但是得到了:

java.lang.IllegalStateException: No match found

如果我在match.groupCount()之前致电match.group(1)

def match = "Some text" =~ /(text)/
if (match.groupCount() >= 1) {
    print match.group()  // error
}

// or

def match = "Some text" =~ /(text)/
if (match) {
    print match.group()  // success
}

1 个答案:

答案 0 :(得分:-1)

第一个变体中的问题是,在调用groupCount()之前必须先调用find()matches()

def match = "Some text" =~ /(text)/
if (match.find()) {
    println match.groupCount()
    print match.group()  // error
}

第二种情况下的if (match) {...}实际上调用了asBoolean(),后者在匹配器上调用了find()

还有一些更简单的变体

("Some text 2 text" =~ /text/).each{
    println it
}

println (("Some text 2 text" =~ /text/).collect())