正则表达式匹配 ip 地址的问题

2019 年 3 月 10 日
 heavenyoung
代码:re.search(r'((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]\n)','1.1.1.10')
输出:<re.Match object; span=(0, 7), match='1.1.1.1'>

最后一位的 0 或者 00 都匹配不了是什么问题啊
2632 次点击
所在节点    Python
7 条回复
msg7086
2019 年 3 月 10 日
因为.1 就满足匹配条件了,不会继续往下匹配?
povvoq
2019 年 3 月 10 日
你这里满足了\d,就不往下继续了
heavenyoung
2019 年 3 月 10 日
谢谢,突然卡住了😂
heavenyoung
2019 年 3 月 10 日
@msg7086 但是为什么前面都匹配上了,怎么改一下呢
msg7086
2019 年 3 月 10 日
因为前面要匹配 点 啊。
要匹配到结尾需要用$。
(说句实话,我是很不喜欢用正则来做这种检测的。正则是处理文字的,不是检查数字范围用的。)
heavenyoung
2019 年 3 月 10 日
@msg7086 ok,懂了🙏
hanssx
2019 年 3 月 14 日
自己在网上搜的一直在用的
def is_valid_ip(ip):
p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$')
if p.match(ip):
return True
else:
return False

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/543066

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX