2015-08-15 3767 views
0

我有一个巨大的IP范围列表,其中每个范围都用连字符分隔并放在新行上,我只需要将IP保留在相同的3级范围:50.197。 .0-50.197。 .255,但不是50.197.62.0-50.197.73.125等 到目前为止无法确定如何做到这一点。 我真的很感谢这里的任何帮助。谢谢。Notepad ++ RegEx:匹配对应于xxxx/24的IP地址范围

其他示例。

想保留:
4.49.119.0-4.49.119.255
12.161.203.64-12.161.203.79
23.25.83.201-23.25.83.201
24.23.113.0-24.23.113.255
38.101.137.0 -38.101.137.255
38.107.144.0-38.107.144.255
38.107.146.0-38.107.146.255
50.73.187.0-50.73.187.216

想匹配正则表达式小号Ø我可以删除它们:
64.58.246.0-64.58.247.255
66.212.138.0-66.212.140.255
67.172.21.0-67.172.23.255
67.186.41.128-67.186.50.115
68.235.192.0-68.235。 223.255
70.89.104.0-70.89.105.87
71.16.71.96-71.16.72.103
71.60.156.12-71.60.162.255
71.162.15.128-71.162.12.98
72.22.23.0-72.22.24.127

+0

恐怕我不明白你在这里的意思。它看起来像你想匹配50.197.63.0/24,但不是其他一些范围,然后排除该子网?你能澄清吗?发布一些您希望匹配的IP地址的例子,以及一些您不希望匹配的IP地址例子。 – melwil

回答

1

如果你的意思是你想匹配的开头任何IP地址“50.197.62”你可以这样做:

/50\.197\.62\.\d{1,3}/ 

在IP地址通常指定范围内都是这样完成的:50.197.62.0/24

这就是所谓的CIDR标记,你可以阅读更多有关在这里:https://networkengineering.stackexchange.com/questions/3697/the-slash-after-an-ip-address-cidr-notation

编辑:

理解,你想匹配整个字符串“IP-IP”,它得到了更加清晰之后。

/(\d{1,3}\.\d{1,3}\.\d{1,3}\.)\d{1,3}-\1\d{1,3}/g 

演示:https://regex101.com/r/cO1nQ6/1

编辑2:

反向:

/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.)\d{1,3}-(?!\1)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/gm 

这就需要标志m为多,迫使搜索从线开始走。另一方面,我也应该使用它。

演示:https://regex101.com/r/eQ5uF1/3

+0

谢谢,但我具体的IP数据库的方式,我写我的问题,即分裂用连字符。我不需要以另一种方式重新编写它们,我只想写一个正则表达式来保持前三个数字的IP范围相同。我用更多的例子更新了我的问题。 –

+0

在那里,答案更新了,那是你的意思? – melwil

+0

非常感谢,但请您提供相反的表达方式吗?因为相反,我需要匹配那些具有不同子网的范围,所以我可以将它们替换为无。 –

1

你可以用BAT命令对其进行管理,而不是正则表达式

for /F "tokens=1-8 delims=.-" %a in (iplist.txt) do @if %c EQU %g echo %a.%b.%c.%d-%e.%f.%g.%h>> newiplist.txt 

或者,如果你想先有3个街区等于:

for /F "tokens=1-8 delims=.-" %a in (iplist.txt) do @if "%a.%b.%c" EQU "%e.%f.%g" echo %a.%b.%c.%d-%e.%f.%g.%h>> newiplist.txt 

假设IPLIST。 txt是所有的IP列表,newiplist.txt是新的IP列表。

我想要注意的是,如果创建批处理文件,你应该使用单一的%如果从shell和双%(%% a,%% b等)运行。