正则表达式匹配以“.”分隔的两位数字集

Regex to match set of two digits seperated by "."

我试图将正则表达式仅匹配到 select,

两位数字后跟可选的“.”后跟两位数字,然后是可选的“。”后跟两位数字,然后是可选的“。”后跟两位数字。

例如输入数据为:

12.45.7810
12345678
12.34.56.78
1.234.56.78
12.45.7816 

预期匹配为:

12345678
12.34.56.78

我绞尽脑汁想明白为什么下面是错误的:

^\d{2}\.*\d{2}\.*\d{2}\.*\d{2}$

我对上述正则表达式的理解如下:

^ 是行首
后跟两位数,后跟零个或多个 . 个字符,
后跟两位数,后跟零个或多个 . 个字符,
后跟两位数,后跟零个或多个 . 个字符,
后跟两位数字
接着是行尾 $.

然而,这是匹配行 12.45.7816

因为 \.* 匹配 7816 之间的空字符串,所以 12.45.7816 匹配。

要仅匹配所有数字对之间存在的点,否则根本不匹配点,您可以使用

^\d{2}(?:(?:\.\d{2}){3}|\d{6})$

its graph:

regex demo

详情

  • ^ - 字符串开头
  • \d{2} - 两位数
  • (?:(?:\.\d{2}){3}|\d{6}) - 两种选择之一:
    • (?:\.\d{2}){3} - 三个点后跟两个数字
    • | - 或
    • \d{6} - 六位数
  • $ - 字符串结尾