Groovy синтаксис для сопоставления регулярных выражений - PullRequest
44 голосов
/ 19 апреля 2009

Что такое Groovy-эквивалент следующего кода Perl?

my $txt = "abc : groovy : def";
if ($txt =~ / : (.+?) : /) {
  my $match = $1;
  print "MATCH=$match\n"; 
  # should print "MATCH=groovy\n"
}

Я знаю, что есть несколько способов сделать это (включая обычный способ Java) - но каков "Groovy способ" сделать это?

Это один из способов сделать это, но он кажется немного неуклюжим - особенно запись массива (m[0][1]), которая кажется немного странной. Есть ли лучший способ сделать это? Если нет - опишите, пожалуйста, логику m[0][1].

def txt = "java : groovy : grails"
if ((m = txt =~ / : (.+?) :/)) {
  def match = m[0][1]
  println "MATCH=$match"
}

Ответы [ 3 ]

77 голосов
/ 19 апреля 2009

m[0] - первый объект соответствия.
m[0][0] - это все, что соответствует этому совпадению.
m[0][1] - первый захват в этом матче.
m[0][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]
19 голосов
/ 19 апреля 2009

Это было самое близкое совпадение с кодом Perl, которого я мог достичь:

def txt = "abc : groovy : def"
if ((m = txt =~ / : (.+?) : /)) {
  def match = m.group(1)
  println "MATCH=$match"
}
0 голосов
/ 19 апреля 2009

Это мое лучшее понимание того, как сделать это с помощью синтаксиса Groovy (но также посмотрите ответ lfaraone):

import java.util.regex.Matcher

def txt = 'abc : groovy : def'
if (txt =~ ~/ : (.+?) : /) {
    def match = Matcher.lastMatcher[0][1]
    println "MATCH=$match"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...