我有以下输入与正则表达式匹配:
1.1.1.1
1.01.1.1
01.01.091.01
1.10.100.0010
所以我总共有四组由数字组成。虽然前三个应该匹配,但最后一个不应该匹配。
所以我写了这个正则表达式:
^(\d*[1-9]+\.){4}$
通常,此正则表达式应返回所有字符串,其中任何组中的任何数字不后跟零。或者更容易:我想不能将所有数字与尾随零匹配。
然而,这与任何事都不相符。 regex1010.com
告诉我们:
重复捕获组仅捕获最后一次迭代。放一个 捕获重复组周围的组以捕获所有迭代或 如果您对数据不感兴趣,请使用非捕获组
但是当我添加另一个捕获组时,我收到相同的消息:
^((\d*[1-9]+\.)){4}$
同样适用于非捕获组:
^(?:\d*[1-9]+\.){4}$
当然,我可以写四次同一组,但这很笨拙,难以阅读。
答案 0 :(得分:1)
正如其他人所说,点是点,所以我们有三个相同的组,一个没有点。
所以这个正则表达式为我做了:
(?:\d*[1-9]\.){3}(?:\d*[1-9])
答案 1 :(得分:0)
您永远不会在模式中指定点。你要求的是,实际上,不是重复四个,它是由点分隔的四个数字的特定单一模式。
^(\d*[1-9]+\.\d*[1-9]+\.\d*[1-9]+\.\d*[1-9]+)$
你唯一可以考虑重复的是“数字+点”部分,但是你重复三次次并添加另一个数字。那么正则表达式就会变成这样:
^((\d*[1-9]+\.){3}\d*[1-9]+)$
但是,您的第三行末尾包含一个空格,因此您可能需要添加额外的检查来修剪它们。
答案 2 :(得分:-1)