问题描述
我正在尝试匹配正则表达式以仅选择
两位数后跟可选的“。”后跟两位数字,后跟可选的“。”后跟两位数字,后跟可选的“。”后跟两位数字。
例如,如果输入数据是:
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})$
请参见its graph:
请参见regex demo
详细信息
-
^
-字符串的开头 -
\d{2}
-两位数字 -
(?:(?:\.\d{2}){3}|\d{6})
-两种选择之一:-
(?:\.\d{2}){3}
-出现三个点,后跟两位数字 -
|
-或 -
\d{6}
-六位数
-
-
$
-字符串结尾