Groovy正则表达式模式匹配中是否有命名组?

rip*_*234 23 regex groovy

就像是:

def match = "John 19" =~ /(&name&)\w+ (&age&\d+)/
def name = match.name
def age = match.age
Run Code Online (Sandbox Code Playgroud)

是否有一个groovy语法,允许这样的东西(而不是&我组成的虚构运算符?

tim*_*tes 38

假设您使用的是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"
}
Run Code Online (Sandbox Code Playgroud)

如果您还没有使用java 7,需要第三方正则表达式库


nat*_*tke 17

这不会命名组,但是闭包会对匹配进行参数化:

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

哪个输出:

John 19
John
19
Run Code Online (Sandbox Code Playgroud)

这是一个有用的参考:http://naleid.com/blog/2008/05/19/dont-fear-the-regexp/

  • 如果您只想将数字19作为输出,您可以这样做:`println"John 19".find(/(\ w +)(\ d +)/){it [2]}` (7认同)