2012-10-17 16 views
18

Biorąc pod uwagę następujące Groovy instrukcja switch Kod:Groovy Regex: grupa przechwytywania w instrukcji switch

def vehicleSelection = "Car Selected: Toyota" 

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

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

Czy to możliwe, aby wydobyć słowo "Toyota" bez definiowania nowej zmiennej (def)?

Odpowiedz

27

Jest to możliwe za pomocą metody lastMatcher dodaną Matcher przez 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

Wciąż musiałbym jednak zadeklarować 'm'. Zastanawiałem się, czy istnieje coś takiego jak "$ _" Perla. Jeśli jest to ograniczenie Groovy, może użycie 'def' jest w porządku. – Reimeus

+0

@Reimeus Znaleziono inny sposób! Zastępuję odpowiedź ... –

+0

Tego właśnie szukałem. Dzięki! – Reimeus

3

Building na tim_yates odpowiedź, która była bardzo pomocna dla mnie:

Jeśli chcesz uniknąć pęczek „Matcher.lastMatcher "w kodzie możesz utworzyć funkcję pomocnika, która będzie działać jako 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; 
} 
Powiązane problemy