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

Golang正则匹配字符串中最后一对花括号(含括号本身)

Golang匹配字符串中最后一对含内容的花括号解决方案

针对字符串abc {popo}/popo/{ahhh},要匹配最后一对带内容的花括号(含括号本身),因Golang不支持负向前瞻,可通过以下两种可靠方案实现:

方案一:匹配所有符合项后取最后一个

先写出匹配任意{...}结构的正则,提取所有匹配结果后取最后一个元素即可:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	targetStr := "abc {popo}/popo/{ahhh}"
	// 匹配所有{包含内容}的结构,[^}]+确保只取括号内非}的内容
	reg := regexp.MustCompile(`{[^}]+}`)
	allMatches := reg.FindAllString(targetStr, -1)
	if len(allMatches) > 0 {
		fmt.Println(allMatches[len(allMatches)-1]) // 输出:{ahhh}
	}
}

方案二:通过贪婪匹配直接定位最后一个

利用正则的贪婪匹配特性,让前面的.*尽可能匹配最多内容,直到遇到最后一个{...},再通过分组提取目标部分:

package main

import (
	"fmt"
	"regexp"
)

func main() {
	targetStr := "abc {popo}/popo/{ahhh}"
	// .*贪婪匹配前面所有内容,分组捕获最后一个{...}
	reg := regexp.MustCompile(`.*({[^}]+})$`)
	matchResult := reg.FindStringSubmatch(targetStr)
	if len(matchResult) > 1 {
		fmt.Println(matchResult[1]) // 输出:{ahhh}
	}
}

补充说明

之前尝试的{.+?}$之所以可能失效,是因为+?是非贪婪匹配,若字符串存在嵌套或特殊字符时易出现意外匹配;而{[^}]+}更精准,明确匹配括号内不含}的内容,适配多数常规场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:39:14