首页 > 解决方案 > 如何匹配彼此相邻的括号?

问题描述

我正在尝试解析 Helm 模板的行。当我在同一行并排声明值时遇到问题。

例如,该行image: "{{ $.Values.image.repository }}:{{ $.Values.image.tag }}"返回一个大匹配,而不是括号内的两个匹配。

我试过使用(\-)?( )?(.*):( )\{\{( )(\$)?.Values.*\}\}.

我想获得两个值实例而不是一个大实例。

标签: regexgo

解决方案


我猜你可能想写一个看起来有点类似的表达式:

\s*{{\s*\$?\.Values([^}]*)?\s*}}

测试

package main

import (
    "regexp"
    "fmt"
)

func main() {
    var re = regexp.MustCompile(`(?m)\s*{{\s*\$?\.Values([^}]*)?\s*}}`)
    var str = `image: "{{ $.Values.image.repository }}:{{ $.Values.image.tag }}`

    for i, match := range re.FindAllString(str, -1) {
        fmt.Println(match, "found at index", i)
    }
}

如果您想探索/简化/修改表达式,它已在 regex101.com的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。


正则表达式电路

jex.im可视化正则表达式:

在此处输入图像描述


推荐阅读