正则匹配IP

摘要:
IP地址的长度为32位,分为4段,每段8位,以十进制数字表示。每个段的范围为0~255(2^8),段之间用英文句点“.”分隔。例如,计算机的IP地址为10.11.44.100。IP地址组成特征:250-255、200-249、0-199。d) )最后,在前三段加上句号。您可以使用{3}重复它,第四段将再次匹配以获得IP地址的正则表达式:(?因为正则表达式规则之一:第一个匹配具有最高优先级。请注意,这两个IP地址也可以匹配,并且应该单独过滤。

分析

IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255( 2^8 ),段与段之间用英文句点“.”隔开。例如:某台计算机IP地址为10.11.44.100。

IP地址的组成特点:250-255、200-249、0-199。 

分别考虑
这三种情况可以分开考虑, 
1. 250-255:特点:三位数,百位是2,十位是5,个位是0~5,用正则表达式可以写成:25[0-5] 
2. 200-249:特点:三位数,百位是2,十位是0~4,个位是0~9,用正则表达式可以写成:2[0-4]d 
3.  0-199:这个可以继续分拆,这样写起来更加简单明了. 
     0-9:    特点:一位数,个位是0~9,用正则表达式可以写成:d 
     10-99:  特点:二位数,十位是1~9,个位是0~9,用正则表达式可以写成:[1-9]d 
     100-199:特点:三位数,百位是1,十位是0~9,个位是0~9,用正则表达式可以写成:1d{2}

 

再组合

于是0-99的正则表达式可以合写为[1-9]?d

那么0-199用正则表达式就可以写成(1d{2})|([1-9]?d)

这样0~255的正则表达式就可以写成(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d)))

最后,前面3段加上句点.可以使用{3}重复得到,第4段再来一次同样的匹配,得到IP地址的正则表达式:

((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))))

 

注意: 

1.  为什么三位数的匹配放在二位数/一位数的前面?

因为正则表达式规则之一:最先开始的匹配拥有最高的优先权。

2.  0.0.0.0和255.255.255.255是合法存在的IP地址,你知道是为什么吗?

注意这两个IP地址也可以匹配,要单独过滤。

4.  为什么前面在最前面要有?:呢?它在这里有什么用?

?:是不捕获分组的意思,就是()中的内容本来可以在后边用1,2等代替,现在不能了。同时在匹配出的完整代码中也不包含分组。( 详细看?<:哪一篇的解释 )

正则表达式验证工具,The Regulator 下载地址:http://sourceforge.net/projects/regulator/

 

免责声明:文章转载自《正则匹配IP》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows配置Python多版本共存VMware安装Ubuntu时出现Intel VT-X处于禁用状态的情况的处理办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

常见正则表达式汇总【一】

1. 匹配行的起始和结束: Ip as-path access-list 20 permit 850 该过滤器匹配任何包含字符串 850 的 as-path 。匹配的 as-path 例如:( 850 ),( 23 , 5 , 850 , 155 )和( 1123 , 850 , 367 )等等。无论所匹配的串是属性中唯一的串或者属性中多个 AS 号中的一...

java正则表达式——Greedy、Reluctant和Possessive

数量词 Greedy Reluctant Possessive 匹配 X? X?? X?+ X,一次或一次也没有 X* X*? X*+ X,零次或多次 X+ X+? X++ X,一次或多次 X{n} X{n}? X{n}+ X,恰好n次 X{n,} X{n,}? X{n,}+ X,至...

Jmeter认知(一)

1.解释什么是jmeter?   jmeter是一款java开源工具,用于性能负载测试。它旨在分析和衡量web应用程序和各种服务的性能和负载功能行为。 2.说明jmeter的工作原理?   jmeter就像一群将请求发送到目标服务器的用户一样。它收集来自目标服务器的响应以及其他统计数据,这些统计数据通过图形或表格显示应用程序或服务器的性能。 3.说明可以在...

正则表达式高级技巧基本概念实例详解[译]

正则表达式(Regular Expression, abbr. regex) 功能强大,能够用于在一大串字符里找到所需信息。它利用约定俗成的字符结构表达式来发生作用。不幸的是,简单的正则表达式对于一些高级运用,功能远远不够。若要进行筛选的结构比较复杂,你可能就需要用到高级正则表达式。 本文为您介绍正则表达式的高级技巧。我们筛选出了八个常用的概念,并配上实例...

新手小白必看,3种网页抓取方法。

3种抓取其中数据的方法。首先是正则表达式,然后是流行的BeautifulSoup模块,最后是强大的lxml模块。 1 正则表达式 当我们使用正则表达式抓取国家(或地区)面积数据时,首先需要尝试匹配``元素中的内容,如下所示。 >>> import re >>> from chp1.advanced_link_crawl...

PostgreSQL 字符串操作函数 迎客

函数:string || string 说明:String concatenation 字符串连接操作例子:'Post' || 'greSQL' = PostgreSQL 函数:string || non-string or non-string || string说明:String concatenation with one non-string i...