2013-03-27 16 views
21

何か?:Groovy正規表現のパターンマッチに名前付きグループがありますか?以下のような

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

ではなく、私がすることができます、あなたは、Java 7+で使用していると仮定すると、

+1

ない私が見てきたこと:

John 19 John 19 

これは便利参照です。がんばろう。 –

+0

regexpsを使ってこの種のマッチングを可能にする言語はありますか? – sp00m

+3

Perl、python、ruby ...これはかなり標準的な正規表現の機能です。 – ataylor

答えて

31

を作った架空の&オペレータのこのような何かを可能Groovyの構文は(あり

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

をあなたはまだJavaの7上にない場合、あなたはこれが目に名前を付けていないthird party regex library

13

が必要と思います。do e基が、閉鎖が試合をparameterise行います

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

出力:http://naleid.com/blog/2008/05/19/dont-fear-the-regexp/

+4

数値19を出力したい場合は、 'println" John 19 ".find(/(\ d +)/){it [2]}' –

+0

Wow @SebastianVilstrupありがとうございます。 .. groovyは本当に混乱です! ;-) –

関連する問題