鱼C论坛

 找回密码
 立即注册
查看: 1730|回复: 7

[已解决]正则表达式之IP值匹配的问题。

[复制链接]
发表于 2020-8-13 10:27:50 | 显示全部楼层 |阅读模式
3鱼币
本帖最后由 qq13700416415 于 2020-8-13 10:29 编辑

如图,匹配ip值,为啥前三个255都能出来,第四个255就只能显示前两位数,没搞明白哪里出错了,求大神解惑。
螢幕快照 2020-08-13 上午10.25.36.png
最佳答案
2020-8-13 10:27:51
这就是小甲鱼在视频中所提到的bug
前面的255能够匹配,是因为后后面的 . 限制,最后面的无法匹配全部255,是因为  [0,1]?\d?\d|2[0-4]\d|25[0-5]这是三部分,第一部分就匹配到了25,所以就不再看是否匹配后面的内容了

需要把这三部分调整换一下位置,先具体后笼统。也就是吧这三者完全翻个顺序,先匹配25开头的三位;若没有,再匹配2开头的三位;若没有,最后在匹配0或1开头的一到三位
p = r'(?:(?:25[0-5]|2[0-4]\d|[0,1]?\d?\d)\.){3}(?:25[0-5]|2[0-5]\d|[0,1]?\d?\d)'
螢幕快照 2020-08-13 上午10.25.36.png

最佳答案

查看完整内容

这就是小甲鱼在视频中所提到的bug 前面的255能够匹配,是因为后后面的 . 限制,最后面的无法匹配全部255,是因为 [0,1]?\d?\d|2[0-4]\d|25[0-5]这是三部分,第一部分就匹配到了25,所以就不再看是否匹配后面的内容了 需要把这三部分调整换一下位置,先具体后笼统。也就是吧这三者完全翻个顺序,先匹配25开头的三位;若没有,再匹配2开头的三位;若没有,最后在匹配0或1开头的一到三位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-13 10:27:51 | 显示全部楼层    本楼为最佳答案   
这就是小甲鱼在视频中所提到的bug
前面的255能够匹配,是因为后后面的 . 限制,最后面的无法匹配全部255,是因为  [0,1]?\d?\d|2[0-4]\d|25[0-5]这是三部分,第一部分就匹配到了25,所以就不再看是否匹配后面的内容了

需要把这三部分调整换一下位置,先具体后笼统。也就是吧这三者完全翻个顺序,先匹配25开头的三位;若没有,再匹配2开头的三位;若没有,最后在匹配0或1开头的一到三位
p = r'(?:(?:25[0-5]|2[0-4]\d|[0,1]?\d?\d)\.){3}(?:25[0-5]|2[0-5]\d|[0,1]?\d?\d)'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-13 10:32:20 | 显示全部楼层
把你的正则表达式发一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-13 10:39:31 | 显示全部楼层
看着...感觉...表达式好像...是没错- -
你把代码发下吧,正则太长了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-13 10:46:39 | 显示全部楼层
import re
p = r'(?:(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])'
re.findall(p, '255.255.255.255')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-13 17:11:19 | 显示全部楼层
最后一个加个{1,} 强制贪婪
import re
p = r'(?:(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:[0,1]?\d?\d|2[0-4]\d|25[0-5]){1,}'
re.findall(p, '255.255.255.255')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-13 19:33:26 | 显示全部楼层
freeck2013 发表于 2020-8-13 17:11
最后一个加个{1,} 强制贪婪

整个四个元祖实现{1,}可以实现是什么原理,没搞明白。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-13 20:01:49 | 显示全部楼层
qq13700416415 发表于 2020-8-13 19:33
整个四个元祖实现{1,}可以实现是什么原理,没搞明白。。

就是贪婪啊
你要是加上个问好  也就是{1,}?  就和你原来一样
import re
p = r'(?:(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:[0,1]?\d?\d|2[0-4]\d|25[0-5]){1,}?'
re.findall(p, '255.255.255.255')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 11:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表