Groovy 正则表达式多次匹配

Groovy Regex multiple matches

将以下字符串保存在变量“start”中:

user stuff here 5
user banana1 pswd 4 
user lemon2 pswd 5
mumbo jumbo 12333 3
user h3lp pswd 8

什么正则表达式将获取 'pswd' 之后的三位数字 (4,5,8),前面是随机字符串和 'user'? groovy 匹配的新手。我尝试了这个 (username.*secret).\d

理想情况下希望执行这样的操作,然后可以在数组中访问匹配项

def pattern = ~/\S+er\b/
def matcher = "My code is groovier and better when I use Groovy there" =~ pattern
assert matcher[0..-1] == ["groovier", "better"]

您可以使用

/\buser\s+\S+\s+pswd\s+(\d+)/

regex demo详情:

  • \b - 单词边界
  • user - 一个user
  • \s+ - 一个或多个空格
  • \S+ - 一个或多个 non-whitespaces(一些单词)
  • \s+ - 一个或多个空格
  • pswd - 一个pswd
  • \s+ - 一个或多个空格
  • (\d+) - 第 1 组:一个或多个数字。

参见 Groovy demo:

String s = "user stuff here 5\nuser banana1 pswd 4\nuser lemon2 pswd 5\nmumbo jumbo 12333 3\nuser h3lp pswd 8"
def re = /\buser\s+\S+\s+pswd\s+(\d+)/
def res = (s =~ re).collect { it[1] }
print(res)

输出:

[4, 5, 8]