次のPerlコードに相当するGroovyとは何ですか?
my $txt = "abc : groovy : def";
if ($txt =~ / : (.+?) : /) {
my $match = $1;
print "MATCH=$match\n";
# should print "MATCH=groovy\n"
}
私はそれを行う方法が複数あることを知っています(通常のJava方法を含む)-しかし、それを行う「グルーヴィーな方法」とは何ですか?
これはそれを行う1つの方法ですが、少し不器用に感じます-特に、少し奇妙に感じる配列表記(m[0][1]
)。それを行うより良い方法はありますか?そうでない場合-m[0][1]
の背後にあるロジックを説明してください。
def txt = "Java : groovy : grails"
if ((m = txt =~ / : (.+?) :/)) {
def match = m[0][1]
println "MATCH=$match"
}
これは、私が達成できたPerlコードに最も近いものでした。
def txt = "abc : groovy : def"
if ((m = txt =~ / : (.+?) : /)) {
def match = m.group(1)
println "MATCH=$match"
}
m[0]
は最初の一致オブジェクトです。m[0][0]
は、この一致で一致したすべてのものです。m[0][1]
は、この一致の最初のキャプチャです。m[0][2]
は、この一致の2番目のキャプチャです。
読んだものに基づいて(Groovyでプログラムを作成していないか、手元にコピーがない)
def m = "barbaz" =~ /(ba)([rz])/;
m[0][0]
は"bar"
m[0][1]
は"ba"
m[0][2]
は"r"
m[1][0]
は"baz"
m[1][1]
は"ba"
m[1][2]
は"z"
私が正しいかどうかわからないので我慢できなかったので、groovyをダウンロードして例を書いた。
def m = "barbaz" =~ /(ba)([rz])/;
println "m[0][0] " + m[0][0]
println "m[0][1] " + m[0][1]
println "m[0][2] " + m[0][2]
println "m[1][0] " + m[1][0]
println "m[1][1] " + m[1][1]
println "m[1][2] " + m[1][2]
これは、Groovy構文を使用してこれを行う方法を最もよく理解しています(しかし、lfaraoneの応答も参照してください)。
import Java.util.regex.Matcher
def txt = 'abc : groovy : def'
if (txt =~ ~/ : (.+?) : /) {
def match = Matcher.lastMatcher[0][1]
println "MATCH=$match"
}