【发布时间】:2020-09-22 18:32:19
【问题描述】:
我正在尝试将正则表达式匹配为仅选择,
两位数字后跟可选的“.”后跟两位数字,后跟可选的“。”后跟两位数字,后跟可选的“。”后跟两位数。
例如,如果输入数据是:
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}\.\d{2}\.\d{2}|\d{6})$,或者简称为^\d{2}(?:(?:\.\d{2}){3}|\d{6})$。那是你要的吗?仅当 所有 位对之间有点或根本没有点时才匹配点? -
是的,这产生了正确的结果。我现在正试着把它浸泡在我的脑海里:)