首先,您不需要正则表达式分隔符。其次,使用原始字符串文字来定义正则表达式模式是一个好主意,您只需使用 1 个反斜杠来转义正则表达式元字符。{第三,仅当您需要获取不带and的值时才需要捕获组},因此,您可以将其删除以获取{city}, {state}and {zip}。
您可以使用FindAllString获取所有匹配项:
r := regexp.MustCompile(`{[^{}]*}`)
matches := r.FindAllString("{city}, {state} {zip}", -1)
请参阅Go 演示。
要仅获取花括号之间的部分,请使用FindAllStringSubmatch包含捕获括号的模式,{([^{}]*)}:
r := regexp.MustCompile(`{([^{}]*)}`)
matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1)
for _, v := range matches {
fmt.Println(v[1])
}
请参阅此 Go 演示。
正则表达式详细信息
{{([^{}]*)*{}[^...][^]}}