【问题标题】:Regex to match n times for helm正则表达式匹配 n 次 helm
【发布时间】:2021-06-18 08:07:33
【问题描述】:

要匹配这些示例:

1-10-1
1-7-3
10-8-5
1-7-14
11-10-12

这个正则表达式有效:

^[\\d]{1,2}-[\\d]{1,2}-[\\d]{1,2}$

这怎么能写成只匹配“[\d]{1,2}-?”之类的东西三 (n) 次?

【问题讨论】:

  • 我想一个非常常见的结构是使用非捕获组 n 次。类似^\d\d?(?:-\d\d?){2}$
  • 谢谢!它在第一次尝试时有效。我得到了这个 "^(?:[\\d]{1,2}-?){3}" (或者这个适用于 PCRE "^(?:[\\d]{1,2}+- ?){3}" 之前寻求帮助,但它失败了,我不明白为什么你的工作完美。你介意帮我理解吗?
  • 我建议您不要使用这种(您的尝试)构造,因为您将连字符设为可选,本质上允许像“123”或“123456”这样的字符串也是有效的。其次,你的字符类结构最好写成\d,它是 0-9 范围内数字的简写。不知道你为什么试图逃避反斜杠。也许这与 kupernetes 有关,我对此一无所知 =)
  • 是的,转义的 \d 是我能够使其与 kubernetes 舵图渲染一起工作的唯一方法。非常感谢您的解释!!!

标签: regex kubernetes-helm sprig-template-functions


【解决方案1】:

你可以使用:

^\d\d?(?:-\d\d?){2}$

查看在线demo

  • ^ - 起始线锚点。
  • \d\d? - 一个数字后跟一个可选数字(与 \d{1,2} 相同)。
  • (?:-\d\d?){2} - 以连字符开头的非捕获组,后跟与上述相同的结构,一个或两个数字。捕获组恰好重复两次。
  • $ - 结束字符串锚。

这里的想法是避免在您所做的尝试中使用可选的连字符,因为基本上您会开始允许使用完全不同的东西,例如“123”和“123456”。匹配分隔字符串的第一个元素,然后使用非捕获组匹配分隔符和其余所需元素精确 n-1 次更合适。

【讨论】:

    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多