[Regex ]正则表达式匹配ip和域名
来源:互联网 发布:做淘宝直播怎么找客户 编辑:程序博客网 时间:2024/05/22 13:42
转载: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~1991/d/d百位为1的三位数200~2492[0-4]/d三位数,百位是2,十位是0~9250~25525[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})+/.?
- [Regex ]正则表达式匹配ip和域名
- C++ regex 正则表达式 匹配IP 域名
- C++ regex 正则表达式 匹配IP 域名
- 正则表达式-匹配IP、域名
- 匹配IP字串、域名的正则表达式
- 匹配IP字串、域名的正则表达式
- 匹配IP字串、域名的正则表达式
- 匹配IP字串、域名的正则表达式
- 匹配IP字串、域名的正则表达式
- 匹配IP字串、域名的正则表达式
- 匹配IP字串、域名的正则表达式
- 匹配IP字串、域名的正则表达式
- IP和域名正则表达式
- 正则表达式匹配域名
- Regex.Match,使用正则表达式匹配字符串
- 几个经典的正则表达式Regex匹配
- 正则表达式基础应用(匹配matches(regex))
- c++11 <regex>正则表达式匹配
- The Ephemeral Port Range
- 虚函数、虚继承对sizeof的影响
- JSONObject简介
- 对复数进行的+-*/运算符重载
- 【转】File Mapping技术
- [Regex ]正则表达式匹配ip和域名
- JavaScript数组对象操作方法属性全集合
- System.out.println和System.err.println的区别
- SR-IOV
- C#对各种图片特效(GDI画图)
- informatical lookup
- 用Gearman进行分布式任务处理
- Ajax 跨域传值之 jsonp
- 日积月累---技术网站集--未完待续