Существуют ли названные группы в шаблоне Groovy regex?
Что-то вроде:
def match = "John 19" =~ /(&name&)\w+ (&age&\d+)/
def name = match.name
def age = match.age
Есть ли синтаксис groovy, который позволяет что-то вроде этого (вместо вымышленного оператора &
, который я составил?
Ответы
Ответ 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/