通过模式匹配进行 Groovy 循环

问题描述 投票:0回答:1
    def regex = 'crt1234[a-z]_(\\w\\w)_DTS(.*)'
    Pattern pattern = Pattern.compile(regex)
    Matcher matcher = pattern.matcher("crt1234_DH_DTS")
    matcher.findAll() 

如何循环播放比赛?当我尝试以下操作时,它会抛出 IllegalStateEx

    for(i in 1..<matcher.count)
    group += matcher.group(i)

我可以使用以下代码连接组 matcher.findAll() { newGroup -> group += newGroup }

design-patterns groovy
1个回答
0
投票

如果没有尝试匹配您正在经历的输入,对组方法的调用将始终失败。在调用

group()
方法之前,您需要实际尝试匹配。这可以通过在调用
find()
方法之前调用匹配器上的
group()
方法来完成。

这是在 Geeks for Geeks 上找到的示例(根据您的用例进行修改):

        // Get the regex to be checked 
        String regex = "crt1234[a-z]?_(\\w\\w)_DTS(.*)"; 
  
        // Create a pattern from regex 
        Pattern pattern 
            = Pattern.compile(regex); 
  
        // Get the String to be matched 
        String stringToBeMatched 
            = "crt1234_DH_DTS"; 
  
        // Create a matcher for the input String 
        Matcher matcher 
            = pattern 
                  .matcher(stringToBeMatched); 
  
        // Get the current matcher state 
        MatchResult result 
            = matcher.toMatchResult(); 
        System.out.println("Current Matcher: "
                           + result); 
  
        while (matcher.find()) { 
            // Get the group matched using group() method 
            System.out.println(matcher.group()); 
        } 
© www.soinside.com 2019 - 2024. All rights reserved.