我有以下输入要与正则表达式匹配:
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}$
当然,我可以只写同一个组四次,但这相当笨拙且难以阅读。
您永远不会在图案中指定点。你要求的其实不是四的重复,而是用点隔开的四个数字的特定单一模式。
^(\d*[1-9]+\.\d*[1-9]+\.\d*[1-9]+\.\d*[1-9]+)$
在那里,你可以考虑重复的唯一的事情就是“数+点”的一部分,但你重复3次,并添加另一个号码。然后正则表达式会变成这样:
^((\d*[1-9]+\.){3}\d*[1-9]+)$
但是,您的第三行末尾包含一个空格,因此您可能需要添加额外的检查以将其剪掉。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句