2012-10-17 46 views
18

捕獲組考慮下面的Groovy代碼switch語句:Groovy的正則表達式:在switch語句

def vehicleSelection = "Car Selected: Toyota" 

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

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

是否可以提取字「豐田」 沒有定義一個新的(def)變量?

回答

27

這是可能的使用方法lastMatcher通過Groovy中加入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]}" 
} 
+0

雖然我仍然需要聲明'm'。我想知道是否有像Perl的'$ _'這樣的東西。如果這是Groovy的限制,那麼也許可以使用'def'。 – Reimeus

+0

@Reimeus找到另一種方式!替換答案... –

+0

這就是我一直在尋找的東西。謝謝! – Reimeus

3

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