What is the Groovy equivalent of the following Perl code?
my $txt = \"abc : groovy : def\";
if ($txt =~ / : (.+?) : /) {
my $match = $1;
print \"MATCH=$m
m[0]
is the first match object.
m[0][0]
is everything that matched in this match.
m[0][1]
is the first capture in this match.
m[0][2]
is the second capture in this match.
Based on what I have read (I don't program in Groovy or have a copy handy), given
def m = "barbaz" =~ /(ba)([rz])/;
m[0][0]
will be "bar"
m[0][1]
will be "ba"
m[0][2]
will be "r"
m[1][0]
will be "baz"
m[1][1]
will be "ba"
m[1][2]
will be "z"
I could not stand not knowing if I was correct or not, so I downloaded groovy and wrote an example:
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]
This is my best understanding of how to do this using Groovy syntax (but see lfaraone's response too):
import java.util.regex.Matcher
def txt = 'abc : groovy : def'
if (txt =~ ~/ : (.+?) : /) {
def match = Matcher.lastMatcher[0][1]
println "MATCH=$match"
}
This was the closest match to the Perl code that I could achieve:
def txt = "abc : groovy : def"
if ((m = txt =~ / : (.+?) : /)) {
def match = m.group(1)
println "MATCH=$match"
}