鱼C论坛

 找回密码
 立即注册
查看: 4392|回复: 13

[已解决]关于正则表达式匹配IP和端口的两个疑问。

[复制链接]
发表于 2018-3-23 09:07:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 技术农民 于 2018-3-23 09:09 编辑

关于正则表达式匹配IP和端口,在鱼C的书籍教程中,发现两个问题,一直没解决,
问题如下:

书籍教学源代码如下:

  1. import re
  2. re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])','other192.168.1.1other')
复制代码


运行后能得出和书本一样的正确结果。

  1. <_sre.SRE_Match object; span=(5, 16), match='192.168.1.1'>
复制代码


但是修改匹配的IP地址后,问题发生了。
1。如果IP地址是不正确的。
   
  1. re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])','other392.168.1.1other')
复制代码


运行后的结果为:
  1. <_sre.SRE_Match object; span=(6, 16), match='92.168.1.1'>
复制代码

结果不正确。

2.如果IP地址的最后一段IP地址是2XX以下的,就没错。2XX以上的,就会出错。。

  1. re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])','other192.168.1.123other')
复制代码

运行结果正确:
  1. <_sre.SRE_Match object; span=(5, 18), match='192.168.1.123'>
复制代码


如果是2XX的。
  1. re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])','other192.168.1.223other')
复制代码

运行结果错误:     
  1. <_sre.SRE_Match object; span=(5, 17), match='192.168.1.22'>
复制代码


初学者,实在不知道原因,往大侠解答以下。
最佳答案
2018-3-23 16:31:19
查了半天,改为re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\w)'就可以完美匹配了,连‘356’这种不合规范的IP都能匹配出来
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-23 09:12:03 | 显示全部楼层
看不懂……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 09:16:22 | 显示全部楼层

这是书籍里面正则表达式里面匹配IP的那段源代码。书籍178页里面的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 09:35:12 | 显示全部楼层
问题1:ip地址的范围为0~255,所以392就不会正常匹配了。
问题2,还没想清楚。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 09:49:54 | 显示全部楼层
需要添加起始边界吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 12:20:48 | 显示全部楼层
冬雪雪冬 发表于 2018-3-23 09:35
问题1:ip地址的范围为0~255,所以392就不会正常匹配了。
问题2,还没想清楚。

那剩余的IP地址段也应该不显示出来才对。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 12:39:46 | 显示全部楼层
冬雪雪冬 发表于 2018-3-23 09:35
问题1:ip地址的范围为0~255,所以392就不会正常匹配了。
问题2,还没想清楚。

import re
a = re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}(2[0-4]\d|25[0-5]|[01]{0,1}\d{0,1}\d)','other192.168.1.223other')
print(a)
问题2应该是这个原因,把最后一位的或匹配正则表达式顺序调整一下就能抓到223了,大佬看看对吗?有奖励不?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 13:37:24 | 显示全部楼层
技术农民 发表于 2018-3-23 12:20
那剩余的IP地址段也应该不显示出来才对。

匹配不了392,可以匹配92
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 15:41:12 | 显示全部楼层
re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])','other192.168.1.223other')
应该是找到符合项了后,就不再进行匹配了吧。192.168.1.223,最后一项223中的22符合[01]{0,1}\d{0,1}\d,就不再匹配后面的2[0-4]\d了,调整一下顺序应该可以匹配上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 15:58:32 | 显示全部楼层
补充一下,前面三项能匹配出来,是因为有\.中的”.“作为匹配边界,所以可以匹配出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 16:31:19 | 显示全部楼层    本楼为最佳答案   
查了半天,改为re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\w)'就可以完美匹配了,连‘356’这种不合规范的IP都能匹配出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-26 10:04:42 | 显示全部楼层
小白龙32 发表于 2018-3-23 16:31
查了半天,改为re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}([01]{0,1}\d{0,1}\d|2[0-4]\d|2 ...

厉害,不错。

我想了一下,你这个是对的。不管什么先匹配出来,然后再进行判断,是真的IP地址就保留,不是就放弃。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-26 10:07:25 | 显示全部楼层
大头目 发表于 2018-3-23 12:39
import re
a = re.search(r'(([01]{0,1}\d{0,1}\d|2[0-4]\d|25[0-5])\.){3}(2[0-4]\d|25[0-5]|[01]{0,1} ...

你这个有个问题,最后一位的数值如果大于255,还是无法完全抓取,会有遗漏。
我想了想,IP地址的抓取不能单靠这一行代码实现。一行代码无法判定IP地址的真伪。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 10:36:01 From FishC Mobile | 显示全部楼层
技术农民 发表于 2018-3-26 10:07
你这个有个问题,最后一位的数值如果大于255,还是无法完全抓取,会有遗漏。
我想了想,IP地址的抓取不 ...

正常ip地址没有一位会超过255吧兄弟
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-9 16:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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