Подтвердить что ты не робот

Существуют ли названные группы в шаблоне Groovy regex?

Что-то вроде:

def match = "John 19" =~ /(&name&)\w+ (&age&\d+)/
def name = match.name
def age = match.age

Есть ли синтаксис groovy, который позволяет что-то вроде этого (вместо вымышленного оператора &, который я составил?

4b9b3361

Ответ 1

Предполагая, что вы используете Java 7+, вы можете:

def matcher = 'John 19' =~ /(?<name>\w+) (?<age>\d+)/
if( matcher.matches() ) {
  println "Matches"
  assert matcher.group( 'name' ) == 'John'
  assert matcher.group( 'age' ) == '19'
}
else {
  println "No Match"
}

Если вы еще не на java 7, вам понадобится сторонняя библиотека регулярных выражений

Ответ 2

Это не называется группами, но закрытие делает параметризацию соответствия:

("John 19" =~ /(\w+) (\d+)/).each {match, name, age ->
  println match
  println name
  println age
}

который выводит:

John 19
John
19

Это полезная ссылка: http://naleid.com/blog/2008/05/19/dont-fear-the-regexp/