正则表达式匹配以“.”分隔的两位数字集
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
因为 \.*
匹配 78
和 16
之间的空字符串,所以 12.45.7816
匹配。
要仅匹配所有数字对之间存在的点,否则根本不匹配点,您可以使用
^\d{2}(?:(?:\.\d{2}){3}|\d{6})$
详情
^
- 字符串开头
\d{2}
- 两位数
(?:(?:\.\d{2}){3}|\d{6})
- 两种选择之一:
(?:\.\d{2}){3}
- 三个点后跟两个数字
|
- 或
\d{6}
- 六位数
$
- 字符串结尾
我试图将正则表达式仅匹配到 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
因为 \.*
匹配 78
和 16
之间的空字符串,所以 12.45.7816
匹配。
要仅匹配所有数字对之间存在的点,否则根本不匹配点,您可以使用
^\d{2}(?:(?:\.\d{2}){3}|\d{6})$
详情
^
- 字符串开头\d{2}
- 两位数(?:(?:\.\d{2}){3}|\d{6})
- 两种选择之一:(?:\.\d{2}){3}
- 三个点后跟两个数字|
- 或\d{6}
- 六位数
$
- 字符串结尾