regex - 如何匹配彼此相邻的括号?
问题描述
我正在尝试解析 Helm 模板的行。当我在同一行并排声明值时遇到问题。
例如,该行image: "{{ $.Values.image.repository }}:{{ $.Values.image.tag }}"
返回一个大匹配,而不是括号内的两个匹配。
我试过使用(\-)?( )?(.*):( )\{\{( )(\$)?.Values.*\}\}
.
我想获得两个值实例而不是一个大实例。
解决方案
我猜你可能想写一个看起来有点类似的表达式:
\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可视化正则表达式:
推荐阅读
- scala - 将用 SCALA 编写的 Spark UDF 转换为 JAVA
- python - dict变量后的方括号是什么意思
- python - Youtube 下载进度条问题
- reactjs - 未捕获的错误:目标容器不是 DOM 元素。在反应
- tensorflow - 更改图像标题模型中的标记名称会影响性能吗?
- ios - 快速使用计时器
- keras - ValueError:两个形状中的维度 1 必须相等,但分别为 10 和 1
- python - Python - 比较 2 列和 2 行中的 TS
- ssh - Ansible 无法通过 SSH 连接到远程主机:“控制路径不存在”和“mux_client_read_packet: read header failed: Broken pipe”
- chromium - Chromium 如何定义系统文件?