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

[Regex ]正则表达式匹配ip和域名

发布时间:2020-12-14 02:23:47 所属栏目:百科 来源:网络整理
导读:转载:http://blog.csdn.net/seawave/article/details/1520988 读了几页《Mastering Regular Expression》,有心想写一个能够匹配IP字串的正则表达式,实际尝试发现远没有自己写几行代码来判断来得容易,呵呵。 一个IP字串,由四段组成,每一段是0~255的数

转载:http://blog.csdn.net/seawave/article/details/1520988

读了几页《Mastering Regular Expression》,有心想写一个能够匹配IP字串的正则表达式,实际尝试发现远没有自己写几行代码来判断来得容易,呵呵。

一个IP字串,由四段组成,每一段是0~255的数字,段与段之间用小数点隔开,比如61.139.2.69就是一个合法的IP字串。

如果正则表达式写成/d{1,3}(/./d{1,3}){3}无疑是不负责的,因为它可以匹配300.400.555.666这样的非法IP字串。

要匹配一个0~255之间的数,有几种匹配方式,下面是其中一种:

匹配 正则表达式 说明
0~9 /d 单个数字
10~99 [1-9]/d 两位数
100~199 1/d/d 百位为1的三位数
200~249 2[0-4]/d 三位数,百位是2,十位是0~9
250~255 25[0-5] 三位数,百位是2,十位是5,个位是0~5

写成正则表达式,即:(/d|([1-9]/d)|(1/d/d)|(2[0-4]/d)|(25[0-5])),但是这样的正则表达式在匹配254这样的字串时,会分别匹配2、5、4,得到3个匹配,达不到预期效果,正确做法是将次序颠倒为((25[0-5])|(2[0-4]/d)|(1/d/d)|([1-9]/d)|/d),因为在(xxx|yyy)这种匹配行为中,是从左向右搜索的。

完整的正则表达式是:

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

按:

  • 061这样的高位为0的数是不能被匹配的。
  • 太麻烦,不如自己写一小段代码解析来得容易,呵呵

一个完整的域名,由根域、顶级域、二级、三级……域名构成,每级域名之间用点分开,每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,长度不超过63。

很显然,单独的名字可以由正则表达式[a-zA-Z0-9][-a-zA-Z0-9]{0,62}来匹配,而完整的域名至少包括两个名字(比如google.com,由google和com构成),最后可以有一个表示根域的点(在规范中,最后有一个点的才是完整域名,但一般认为包括两个以上名字的域名也是完整域名,哪怕它后面没有点)。

匹配完整域名的正则表达式:

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

(编辑:李大同)

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

    推荐文章
      热点阅读