正则表达式为 helm 匹配 n 次

Regex to match n times for helm

要匹配这些示例:

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) 次的方式?

您可以使用:

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

在线查看demo

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

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