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
相关产品推荐
相关产品推荐

