首页 > 解决方案 > 正则表达式匹配由“。”分隔的两位数字集

问题描述

我正在尝试将正则表达式匹配为仅选择,

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

例如,如果输入数据是:

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

标签: regexpcre

解决方案


由于匹配和\.*之间的空字符串,因此匹配。781612.45.7816

要仅匹配出现在所有数字对之间的点,或者根本不匹配点,您可以使用

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

查看它的图表

在此处输入图像描述

查看正则表达式演示

细节

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

推荐阅读