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

Ballerina中regexp:Groups的用途、访问方法及使用场景咨询

Ballerina regexp:Groups 实用指南

1. regexp:Groups 的用途

regexp:Groups 是Ballerina正则匹配完成后,专门存储捕获组匹配结果的容器。当你用正则表达式里的括号()定义捕获组时,每个组匹配到的内容都会被存到这个对象里,方便后续提取、操作这些细分的匹配数据。

2. 如何访问 regexp:Groups

要访问它,得先通过regexp:find或regexp:match等方法拿到regexp:Match对象,该对象的groups属性就是regexp:Groups实例,具体访问方式如下:

示例代码

import ballerina/regexp;

public function main() {
    string input = "Ballerina v1.22.0 released in 2023";
    // 普通捕获组匹配
    regexp:Match? matchResult = regexp:find(input, regexp:compile(`(Ballerina) v(\d+\.\d+\.\d+) released in (\d+)`));
    
    if matchResult is regexp:Match {
        // 按索引访问:索引从1开始,对应第一个捕获组(索引0是整个匹配的完整字符串)
        string lang = matchResult.groups[1].value;
        string version = matchResult.groups[2].value;
        string year = matchResult.groups[3].value;
        
        // 命名捕获组匹配与访问
        regexp:Match? namedMatch = regexp:find(input, regexp:compile(`(?<lang>Ballerina) v(?<version>\d+\.\d+\.\d+) released in (?<year>\d+)`));
        if namedMatch is regexp:Match {
            // 通过组名直接访问
            string namedLang = namedMatch.groups["lang"].value;
            string namedVersion = namedMatch.groups["version"].value;
        }
    }
}

访问方式说明

  • 索引访问:捕获组的索引从1开始计数(groups[0]对应整个正则匹配的完整内容),顺序和正则里括号从左到右的顺序一致。
  • 命名访问:如果正则用(?<组名>匹配规则)定义了命名捕获组,直接用groups["组名"]就能拿到对应组的匹配结果,可读性更强。

3. regexp:Groups 的使用场景

  • 结构化数据提取:从非结构化文本中抠出特定字段,比如从日志字符串提取时间戳、错误码,从版本声明里提取语言名称、版本号。
  • 预处理分组内容后替换:如果需要先修改捕获组的内容(比如转大小写、调整格式)再替换原文本,可先通过Groups提取内容处理,再拼接成新字符串完成替换。
  • 多维度格式验证:验证文本格式时,同时提取多个部分做单独校验,比如验证手机号时提取区号和号码段分别检查规则,验证邮箱时提取用户名和域名分别验证合法性。
  • 批量处理分组结果:当正则包含多个捕获组时,遍历Groups对象可以批量处理所有分组的匹配内容,比如一次性提取所有匹配的关键词并存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:28:22