Helm场景下如何编写可重复匹配n次指定规则的正则表达式
Helm场景下自定义段数的正则匹配实现
Helm底层采用Go RE2正则引擎,不支持反向断言等高级语法,以下为兼容RE2的可落地实现方案:
固定匹配3段的写法
适配你给出的1-10-1、11-10-12这类三段格式,可直接用分组重复实现,避免匹配到末尾带横杠的非法值:^\d{1,2}(?:-\d{1,2}){2}$
- 开头
\d{1,2}匹配第一段1-2位数字 - 非捕获组
(?:-\d{1,2})匹配「横杠+1-2位数字」的规则 - 末尾量词
{2}代表上述分组重复2次,加开头的第一段刚好凑够3段 - 首尾的
^和$确保整行完全匹配,不会出现多余字符
支持自定义重复n段的写法
通过Helm模板变量即可动态控制匹配的段数:
- 先在
values.yaml中定义段数变量:
# 自定义要匹配的数字段数,此处设为3即可匹配你的示例格式 segmentCount: 3
- 在模板中动态渲染正则表达式:
{{- $segmentNum := .Values.segmentCount | int }} {{- /* 重复次数为段数减1,因为第一段已单独匹配 */}} {{- $matchRegex := printf `^\\d{1,2}(?:-\\d{1,2}){%d}$` (sub $segmentNum 1) }}
渲染后得到的正则和固定写法完全一致,修改segmentCount的值即可适配n段的匹配需求。
注意事项
不要直接使用(?:\d{1,2}-?){3}这类写法,会匹配到12-34-56-(末尾带横杠)、123456(无横杠)的非法格式,不符合需求。
内容的提问来源于stack exchange,提问作者carrotcakeslayer
相关产品推荐
相关产品推荐

