Groovy Regex:Switch语句中的Capture组

Rei*_*eus 23 regex groovy

给出以下Groovy代码切换语句:

def vehicleSelection = "Car Selected: Toyota"

switch (vehicleSelection) {
   case ~/Car Selected: (.*)/:

      println "The car model selected is "  + ??[0][1] 
}
Run Code Online (Sandbox Code Playgroud)

是否可以在定义new(def)变量的情况下提取"Toyota"一词?

tim*_*tes 34

这可以使用Groovy lastMatcher添加的方法Matcher:

import java.util.regex.Matcher

def vehicleSelection = 'Car Selected: Toyota'

switch( vehicleSelection ) {
   case ~/Car Selected: (.*)/: 
     println "The car model selected is ${Matcher.lastMatcher[0][1]}"
}
Run Code Online (Sandbox Code Playgroud)


Kur*_*gen 5

建立在tim_yates答案上对我来说真的很有用:

如果你想在代码中避免使用一堆"Matcher.lastMatcher",你可以创建一个辅助函数来充当别名.

import java.util.regex.Matcher

static Matcher getm()
{
    Matcher.lastMatcher
}

def vehicleSelection = 'Car Selected: Toyota'

switch( vehicleSelection ) {
    case ~/Car Selected: (.*)/: 
        println "The car model selected is ${m[0][1]}"
     break;
}
Run Code Online (Sandbox Code Playgroud)