2012-10-17 9 views
18

Dato il seguente Groovy istruzione switch codice:Groovy Regex: gruppo Capture Interruttore Dichiarazione

def vehicleSelection = "Car Selected: Toyota" 

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

     println "The car model selected is " + ??[0][1] 
} 

E 'possibile estrarre la parola "Toyota" senza definire una nuova variabile (def)?

risposta

27

Ciò è possibile utilizzando il metodo di lastMatcher aggiunto Matcher da Groovy:

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]}" 
} 
+0

Avrei ancora dovuto dichiarare 'm' però. Mi stavo chiedendo se esistesse qualcosa come Perl's $ $. Se questa è una limitazione di Groovy forse usare un 'def' è ok allora. – Reimeus

+0

@Reimeus Trovato un altro modo! Sostituzione risposta ... –

+0

Questo è quello che stavo cercando. Grazie! – Reimeus

3

Sulla tim_yates rispondere che era davvero utile per me:

Se si vuole evitare che un gruppo di "Matcher.lastMatcher "nel tuo codice puoi creare una funzione di supporto per fungere da alias.

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; 
}