加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用正则表达式匹配IP地址

发布时间:2020-12-14 01:44:14 所属栏目:百科 来源:网络整理
导读:如何使用正则表达式匹配IP地址?这是很常见的任务。说难也难,说易也易,取决于在匹配的精确度以及正则表达式复杂度之间很好的折中。 通常,IP地址以点分十进制方式表示,IP地址分为4段,以点号分隔。要对IP地址进行匹配,首先要对其进行分析。0.0.0.0 - 255.

如何使用正则表达式匹配IP地址?这是很常见的任务。说难也难,说易也易,取决于在匹配的精确度以及正则表达式复杂度之间很好的折中。

通常,IP地址以点分十进制方式表示,IP地址分为4段,以点号分隔。要对IP地址进行匹配,首先要对其进行分析。0.0.0.0 - 255.255.255.255

一个简单的正则表达式:

[0-9]+(?:.[0-9]+){0,3}

或者

^(?:[0-9]{1,3}.){3}[0-9]{1,3}$

它能够完成我们的任务,但是像"3948.3.89.34238"这种字符串也会被匹配到,而我们IP地址的范围0-255之间的值。


下面来一个精确一点的:

^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

注意:上面的表达式是一行,因为这里长度不够所以换行了。

第一步:初步分析

IP地址分为4个段,每个段上可能的取值如下
0-9
10-99
100-199
200-249
250-255

第二步:正则表达

0-9[0-9]
10-99[1-9][0-9]
100-1991[0-9][0-9]
200-2492[0-4][0-9]
250-25525[0-5]

第三步:合并

我们可以把0-9,10-99,100-199合并为0-199

[01]?[0-9][0-9]?

第四步:组合

^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

OK,最终的正则表达式搞定。


注意:

?:表示非捕获文本
表达式是基于BRE的


http://answers.oreilly.com/topic/318-how-to-match-ipv4-addresses-with-regular-expressions/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读