2

要匹配这些示例:

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)次?

4

1 回答 1

2

您可以使用:

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

查看在线演示

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

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

于 2021-06-18T08:43:07.437 回答