Groovy de la syntaxe d'expression régulière correspondant
Quel est le Groovy équivalent de la suite du code Perl?
my $txt = "abc : groovy : def";
if ($txt =~ / : (.+?) : /) {
my $match = $1;
print "MATCH=$match\n";
# should print "MATCH=groovy\n"
}
Je sais qu'il ya plus d'une façon de le faire (y compris la régulière Java cours) - mais qu'est-ce que le "Groovy façon" de faire cela?
C'est une façon de le faire, mais il se sent un peu mal à l'aise - en particulier la notation de tableau (m[0][1]
) qui se sent un peu étrange. Est-il une meilleure façon de le faire? Si ce n' - veuillez décrire la logique derrière m[0][1]
.
def txt = "java : groovy : grails"
if ((m = txt =~ / : (.+?) :/)) {
def match = m[0][1]
println "MATCH=$match"
}
Vous devez vous connecter pour publier un commentaire.
m[0]
est le premier match de l'objet.m[0][0]
est tout ce qui correspond dans ce match.m[0][1]
est la première capture dans ce match.m[0][2]
est la deuxième capture dans ce match.Après ce que j'ai lu (je ne programme en Groovy, ou d'en avoir une copie à portée de main), étant donné
m[0][0]
sera"bar"
m[0][1]
sera"ba"
m[0][2]
sera"r"
m[1][0]
sera"baz"
m[1][1]
sera"ba"
m[1][2]
sera"z"
Je ne pouvais pas supporter de ne pas savoir si j'avais raison ou pas, j'ai donc téléchargé groovy et a écrit un exemple:
/g
pour le multi-match? HeinC'était la correspondance la plus proche du code Perl que j'ai pu réaliser:
m = txt =~ / : (.+?) : /
partie dans un if?=~
est un opérateur regex et si rien ne sera trouvée m serait nulle.@TypeChecked
ou@CompileStatic
, il suffit d'ajouterMatcher m
avant laif
.C'est mon meilleure compréhension de la façon de le faire à l'aide de Groovy syntaxe (mais voir lfaraone réponse de trop):