2012-10-17 26 views
18

Với Groovy switch đang tuyên bố sau:Groovy Regex: nhóm Capture trong Switch Tuyên Bố

def vehicleSelection = "Car Selected: Toyota" 

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

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

Có thể trích xuất từ ​​"Toyota" mà không xác định một (def) biến mới?

Trả lời

27

Điều này có thể sử dụng phương pháp lastMatcher thêm vào Matcher bởi 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

Tôi vẫn phải khai báo 'm'. Tôi đã tự hỏi liệu có cái gì đó giống như «$ _' của Perl. Nếu đây là giới hạn của Groovy, thì có thể sử dụng 'def' là ok. – Reimeus

+0

@Reimeus Tìm một cách khác! Thay thế câu trả lời ... –

+0

Đây là những gì tôi đang tìm kiếm. Cảm ơn! – Reimeus

3

xây dựng trên tim_yates trả lời đó là thực sự hữu ích cho tôi:

Nếu bạn muốn tránh một loạt các "Matcher.lastMatcher "trong mã của bạn, bạn có thể tạo một hàm trợ giúp để hoạt động như một bí danh.

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