用正则表达式匹配IPV4地址
来源:互联网 发布:超级玛丽java代码 编辑:程序博客网 时间:2024/05/29 18:01
IPV4地址由4个组数字组成,每组数字之间以.分隔,每组数字的取值范围是0-255。
IPV4必须满足以下四条规则:
1、任何一个1位或2位数字,即0-99;
2、任何一个以1开头的3位数字,即100-199;
3、任何一个以2开头、第2位数字是0-4之间的3位数字,即200-249;
4、任何一个以25开头,第3位数字在0-5之间的3位数字,即250-255。
这样把规则全部罗列出来之后,构造一个正则表达式的思路就清晰了。
首先满足第一条规则的正则是:\d{1,2}
首先满足第二条规则的正则是:1\d{2}
首先满足第三条规则的正则是:2[0-4]\d
首先满足第四条规则的正则是:25[0-5]
把它们组合起来,就得到一个匹配0-255数字的正则表达式了:
(\d{1,2})|(1\d{2})|(2[0-4]\d)|( 25[0-5])(中间用|连接)
IPV4由四组这样的数字组成,中间由.隔开,或者说由三组数字和字符.和一组数字组成,所以匹配IPV4的正则表达式如下:
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
Java测试代码如下:
public static void matchAndPrint(String regex, String sourceText){ Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(sourceText); while(matcher.find()){ System.out.println(matcher.group()); } } public static void main(String[] args) { String regex = "^(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$"; matchAndPrint(regex, "23.135.2.255"); matchAndPrint(regex, "255.255.0.256"); matchAndPrint(regex, "0.0.0.0"); }
iew plainc
输出结果如下:
23.135.2.255
0.0.0.0
这个正则有一个缺陷,就是如果不使用边界匹配的话,像第二个测试IP 255.255.0.256也会被匹配到,匹配到的结果是255.255.0.25。可以添加限制条件,前后要么是边界,要么是非数字,并且使用前后查找(lookaround),前后查找将在后面介绍。即:
(?<=(\\b|\\D))(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))(?=(\\b|\\D))
view plainco
String regex = "(?<=(\\b|\\D))(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))(?=(\\b|\\D))";
参考:http://blogs.msdn.com/b/oldnewthing/archive/2006/05/22/603788.aspx
- 用正则表达式匹配IPV4地址
- IPv4 地址匹配 正则表达式
- 怎样用正则表达式匹配IPV4地址
- c#使用正则表达式匹配ipv4地址
- ipV4地址正则表达式
- IPv4地址正则表达式
- c#正则表达式 ipv4地址
- 用正则表达式解析IPv4和IPv6地址字符串
- Python 正则表达式验证IPv4地址
- IP地址(IPv4)/IPv6地址的正则表达式
- 正则表达式匹配ip地址
- 正则表达式匹配IP地址
- 检查IPv4和IPv6地址的正则表达式
- 检查IPv4和IPv6地址的正则表达式
- ip地址检查正则表达式 兼容ipv4,ipv6
- JS及java验证 IPV6,IPV4地址的 正则表达式
- Python 正则表达式验证IPv4地址(转)
- IPV4 正则表达式
- 张祖勋:摄影测量的信息化与智能化
- 黑马程序员----网络编程
- 【小熊刷题】3 Sum <Leetcode 15,Java>
- 字符编码详解——彻底理解掌握编码知识,“乱码”不复存在
- 【Android杂谈】关于Adapter的理解
- 用正则表达式匹配IPV4地址
- JavaWeb——CSS_总结
- 逻辑斯蒂回归与梯度下降算法
- Android四大组件-ContentProvider
- JS中setTimeout()的用法详解
- 黑马程序员——java基础知识篇——>数组
- 机器学习_logistic回归笔记
- 2014年腾讯,百度,微软,阿里巴巴(北京站)校园招聘笔试题(涉及C,C++,JAVA,数据结构)
- 真正的聪明人都在下笨功夫