免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 2752 | 回复: 22

[文本处理] 正则表达式匹配IP,无法匹配到最后一个数字 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2016-11-23 09:10:34
发表于 2018-08-03 09:33 |显示全部楼层
QQ图片20180803092733.png

今天在书上看见一个匹配合法IP的正则表达式,但是我用这grep匹配了一下,显示的结果却是12.159.46.20,最后一个零没有匹配到。以下是我使用的命令

QQ图片20180803093243.png

grep -Po '(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))'

请教各位朋友,这里哪个地方有问题,是什么原因导致的?万分感谢您的回复


论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2018-08-03 10:01 |显示全部楼层
本帖最后由 wh7211 于 2018-08-03 10:28 编辑

回复 1# xiongyefeng


匹配IP地址最后1位的是下面的正则表达式:
  1. (\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])
复制代码

如果200在IP地址的最后1位,200匹配『 \d{1,2}』,表达式为真,不会再去匹配后面的『 2[0-4]\d』,因此只会匹配20和0,不会匹配200

匹配IP地址前3位的是下面的正则表达式:
  1. ((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.
复制代码

如果200在IP地址的前3位,200和『 \d{1,2}\.』不匹配,表达式为假,会依次匹配后面的表达式,直到匹配『 2[0-4]\d\.』,表达式为真,因此会匹配200

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 2018-08-03 10:09 |显示全部楼层
那本书这么匹配IP地址啊?是show还是坑,这是个问题...真变成那位道友说的鬼画符了..
  1. grep -Po '(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,3})|(1\d{3})|(2[0-4]\d)|(25[0-5]))'
复制代码


把这个 (\d{1,2}) 改成 (\d{1,3}) 就行了

论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2016-11-23 09:10:34
发表于 2018-08-03 10:55 |显示全部楼层
回复 2# wh7211  回复 3# christmas1102

感谢两位的回复,如果把(\d{1,2})改成(\d{1,3})的话,最后一位也会匹配到777,888,999这样的不合法的IP数字

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2018-08-03 13:45 |显示全部楼层
回复 4# xiongyefeng


  1. cat 1
  2. Ping hog.forta.com [12.159.46.200]
  3. with 32 bytes of data:

  4. awk '{a="\\[((([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5]))]";if(match($0,a,b)){print b[1]}}' 1
  5. 12.159.46.200
复制代码

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2018-08-03 13:53 |显示全部楼层
本帖最后由 chengchow 于 2018-08-03 14:17 编辑
  1. [root@djangoc170 tmp]# echo 12.12.12.200 | grep -Po '(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((1\d{2})|(2[0-4]\d)|(25[0-5])|(\d{1,2}))' --color
  2. 12.12.12.200
复制代码

掉个个就行了,不过好像还有问题,如果位数是12.12.12.299的会匹配成12.12.12.29
  1. for i in `seq 1 1000`;do echo "$i.$i.$i.$i";done | grep -Po '(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))(?!\d)' --color
复制代码
这样应该可以了,主机低位加个约束条件,前面有.号约束就不需要了

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 2018-08-03 13:59 |显示全部楼层
写书的人,写个正则把自己写蒙圈了,这种书还去看它干嘛 - -!  《跟我学正则表达式》不知道作者谁~这么有才

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2018-08-03 14:15 |显示全部楼层
IP地址匹配在正则里面本身就是难点,正则还是很有用的

论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2016-11-23 09:10:34
发表于 2018-08-03 14:24 |显示全部楼层
回复 6# chengchow

QQ图片20180803141656.png
这里还是匹配不到12.12.12.299这个IP地址

论坛徽章:
1
15-16赛季CBA联赛之福建
日期:2016-11-23 09:10:34
发表于 2018-08-03 14:28 |显示全部楼层
回复 5# wh7211

感谢兄台,这里能不能用grep写

QQ图片20180803142739.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP