2013-03-27 14 views
21

Qualcosa di simile:Ci sono gruppi con nome nelle corrispondenze con le espressioni regolari di Groovy?

def match = "John 19" =~ /(&name&)\w+ (&age&\d+)/ 
def name = match.name 
def age = match.age 

C'è una sintassi Groovy che permette di qualcosa come questo (anziché del & dell'operatore fittizio ho fatto la

+1

Non che io abbia mai visto. In bocca al lupo. –

+0

Esiste un linguaggio che permetta questo tipo di abbinamento usando espressioni regolari? – sp00m

+3

Perl, pitone, rubino ... È una caratteristica regex piuttosto standard. – ataylor

risposta

31

Supponendo che si sta utilizzando su Java 7+, è possibile? non:

def matcher = 'John 19' =~ /(?<name>\w+) (?<age>\d+)/ 
if(matcher.matches()) { 
    println "Matches" 
    assert matcher.group('name') == 'John' 
    assert matcher.group('age') == '19' 
} 
else { 
    println "No Match" 
} 

Se non siete su Java 7 ancora, avresti bisogno di un third party regex library

13

Questo non nomina ° e gruppi, ma una chiusura fa parametrizzare il match:

("John 19" =~ /(\w+) (\d+)/).each {match, name, age -> 
    println match 
    println name 
    println age 
} 

quali uscite:

John 19 
John 
19 

Si tratta di un utile riferimento: http://naleid.com/blog/2008/05/19/dont-fear-the-regexp/

+4

Se vuoi solo il numero 19 come output puoi fare così: 'println" John 19 ".find (/ (\ w +) (\ d +) /) {it [2]}' –

+0

Wow @SebastianVilstrup ringrazia. .. groovy è davvero un casino! ;-) –

Problemi correlati