You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy正则中.+运算符的作用及分组匹配逻辑解析

解析Groovy正则提取代码的工作原理

先修正下原代码的小问题——字符串必须加引号,不然Groovy会把drink-a-glass-of-the-orange-juice当成变量名报错:

def myString = "drink-a-glass-of-the-orange-juice"
def getVars = myString =~ /drink-(.+)-of-the-(.+)/
def var1 = getVars[0][1]
def var2 = getVars[0][2]

下面一步步拆解这段代码的逻辑:

1. =~操作符的作用

Groovy里=~是正则匹配操作符,它不会返回布尔值,而是返回一个Matcher对象。这个对象会存储整个正则匹配的所有结果,包括完整匹配的字符串和每个捕获组的内容。

2. 正则表达式/drink-(.+)-of-the-(.+)/的细节

重点说你疑惑的.+:

  • .:匹配任意单个字符(除换行符)
  • +:贪婪匹配修饰符,要求前面的字符(这里是.)至少出现1次,且尽可能多的匹配字符
  • 括号():定义捕获组,会把括号内匹配到的内容单独存起来,方便后续提取。这里有两个捕获组:
    • 第一个(.+):匹配drink-和-of-the-之间的所有字符,也就是你要的var1
    • 第二个(.+):匹配-of-the-之后的所有字符,也就是你要的var2

3. Matcher对象的结构(为什么是嵌套的)

getVars是Matcher实例,当你用getVars[0]访问时,取的是第一个匹配结果(这里整个字符串刚好匹配一次)。这个结果是一个数组:

  • getVars[0][0]:存储整个正则匹配到的完整字符串,也就是"drink-a-glass-of-the-orange-juice"
  • getVars[0][1]:第一个捕获组的内容,也就是"a-glass"
  • getVars[0][2]:第二个捕获组的内容,也就是"orange-juice"

所以不是.+把内容存进嵌套列表,而是正则的捕获组把匹配内容存在Matcher的匹配结果里,Matcher的结果结构本身就是嵌套的——外层是所有匹配项的集合,内层是单个匹配项的完整内容+各个捕获组的内容。

内容的提问来源于stack exchange,提问作者sirius78m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:03:18