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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查存在多少个正则表达式匹配组,然后使用它们相关的知识,希望对你有一定的参考价值。

我想在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
}
答案

第一个变种中的问题,在调用groupCount()之前你必须调用find()or 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())

以上是关于检查存在多少个正则表达式匹配组,然后使用它们的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式匹配四个数字字段或文本字符串

正则表达式小结

订购一组正则表达式模式或获取最大的正则表达式匹配

正则表达式总结

c# 正则表达式捕获

检查是不是存在与正则表达式匹配的数组键