web-dev-qa-db-ja.com

正規表現マッチングのためのGroovy構文

次の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"
}
44
knorv

これは、私が達成できたPerlコードに最も近いものでした。

def txt = "abc : groovy : def"
if ((m = txt =~ / : (.+?) : /)) {
  def match = m.group(1)
  println "MATCH=$match"
}
19
knorv

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]
79
Chas. Owens

これは、Groovy構文を使用してこれを行う方法を最もよく理解しています(しかし、lfaraoneの応答も参照してください)。

import Java.util.regex.Matcher

def txt = 'abc : groovy : def'
if (txt =~ ~/ : (.+?) : /) {
    def match = Matcher.lastMatcher[0][1]
    println "MATCH=$match"
}
0