匹配 IP 地址和域名的正则表达式

  • A+
所属分类:lcx

一个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 1dd 百位为1的三位数

200~249 2[0-4]d 三位数,百位是2,十位是0~9

250~255 25[0-5]

三位数,百位是2,十位是5,个位是0~5

写成正则表达式,即:

(d|([1-9]d)|(1dd)|(2[0-4]d)|(25[0-5]))

但是这样的正则表达式在匹配254这样的字串时,会分别匹配2、5、4,得到3个匹配,达不到预期效果,正确做法是将次序颠倒为:

((25[0-5])|(2[0-4]d)|(1dd)|([1-9]d)|d)

因为在(xxx|yyy)这种匹配行为中,是从左向右搜索的。

完整的正则表达式是:

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

按:

像061这样的高位为0的数是不能被匹配的。

太麻烦,不如自己写一小段代码解析来得容易,例如:

d+.d+.d+.d+

然后检查格式即可。

--------------------------------------------------------------------------------

一个完整的域名,由根域、顶级域、二级、三级……域名构成,每级域名之间用点分开,每级域名由字母、数字和减号构成(第一个字母不能是减号),不区分大小写,长度不超过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})+.?

摘自:http://blog.tianya.cn/blogger/post_show.asp?BlogID=2014653&PostID=17376058

文章来源于lcx.cc:匹配 IP 地址和域名的正则表达式

相关推荐: 【PHP】htmlspecialchars() Html编码函数详解

    PHP htmlspecialchars() Html 编码函数详解,PHP htmlspecialchars() Html 编码函数,PHP htmlspecialchars() Html 编码详解,PHP htmlspecialchars() 编码…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: