请懂正则表达式的电工进来帮个忙

2014-08-21 22:21:30 +08:00
 joyoner
需求:匹配公网地址。即除以下地址外,均为公网地址。
1、10.*.*.*
2、172.16~31.*.*
3、192.168.*.*

写三条即可,但最好写在一条正则式里。
3784 次点击
所在节点    问与答
17 条回复
Automan
2014-08-21 22:32:18 +08:00
'^(192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.)'
joyoner
2014-08-21 22:42:01 +08:00
@Automan 感谢。为了能使匹配的更准确,*能用类似\d{1,3}来表示么。

我在线测试了一下,发现匹配结果不是太理想。

http://tool.chinaz.com/regex
jsonline
2014-08-21 22:45:19 +08:00
不用正则也可以啊
xcv58
2014-08-21 23:21:21 +08:00
我觉得先用正则匹配出所有的 IP 地址,然后再判断是否是公网地址比较好。
qq529633582
2014-08-21 23:27:14 +08:00
匹配公网地址 != 排除私网地址
LZ列出的三个IP段是 http://tools.ietf.org/html/rfc1918#section-3 中的Private Address,还需要排除127.0.0.0/8等特殊IP(见 http://tools.ietf.org/html/rfc5735)
yinheli
2014-08-21 23:39:34 +08:00
yinheli
2014-08-21 23:40:36 +08:00
zyxfsky
2014-08-22 00:24:50 +08:00
^\d{1,3}(?<!10)(?<!(172|192))\.\d{1,3}\.\d{1,3}\.\d{1,3}

好像越想越复杂了,复杂的断言写不来了,断言前面不是172后,同时断言后面不是16-31不知道怎么写,同等高手,求学习
joyoner
2014-08-22 00:28:50 +08:00
@yinheli 这个是正向的,也就是匹配的是私网地址。要来个类似非∧的东东。
chunyang
2014-08-22 03:26:54 +08:00
@yinheli gist 的显示有问题,显然应该在下面加个滚动条的。
ToughGuy
2014-08-22 09:57:36 +08:00
^(?!((127|10)\.\d{1,3}|192\.168|172\.16))\d{1,3}(\.\d{1,3}){3}
ToughGuy
2014-08-22 09:59:12 +08:00
[root@test ~]# cat ip
115.239.211.110
127.0.0.1
192.168.1.1
10.10.16.1
172.16.1.1
199.71.213.22
[root@test ~]# grep -P '^(?!((127|10)\.\d{1,3}|192\.168|172\.16))\d{1,3}(\.\d{1,3}){3}' ip
115.239.211.110
199.71.213.22
zodiac1111
2014-08-22 09:59:42 +08:00
gist突兀有点吓人
66450146
2014-08-22 10:03:07 +08:00
@Livid gist 在手机上会超出楼层宽度
zyxfsky
2014-08-22 11:04:35 +08:00
刚又测试了下,看看这个能否满足你,我测试是ok的

^(?!10\.)\d{1,3}\.(?(?<=172\.)(?!(1[6-9]|2[0-9]|3[0-1])\.))(?(?<=192\.)(?!168\.))\d{1,3}(\.\d{1,3}){2}$
joyoner
2014-08-22 11:07:22 +08:00
@ToughGuy 172.16~172.31,这个范没有体现。
joyoner
2014-08-22 11:08:40 +08:00
@zyxfsky 哈,多谢小峰。

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

https://www.v2ex.com/t/129210

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

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

© 2021 V2EX