2012-10-17 2 views
18

Yakalama grubu:Groovy Regex: Aşağıdaki Groovy kod switch deyimi Verilen Anahtarı Tablosu

def vehicleSelection = "Car Selected: Toyota" 

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

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

o yeni (def) değişken tanımlamadan kelime "Toyota" ayıklamak mümkün mü? tim_yates üzerinde

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

cevap

27

Bu Groovy tarafından Matcher eklenen lastMatcher yöntemini kullanarak mümkündür

Eğer Matcher.lastMatcher" bir demet önlemek istiyorsanız

"kodunuzda bir takma ad olarak hareket etmek için bir yardımcı işlev oluşturabilirsiniz.

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

Yine de 'm' bildirmeliyim. Perl’in $ _' gibi bir şey olup olmadığını merak ediyordum. Bu bir Groovy bir sınırlama ise, belki de 'def' kullanarak bir sorun yok. – Reimeus

+0

@Reimeus Başka bir yol bulduk! Cevabın değiştirilmesi ... –

+0

Bu benim aradığım şey. Teşekkürler! – Reimeus

3

Building bu benim için gerçekten yararlı oldu cevap: