正则表达式知识详解之子表达式 (java版示例)
2016-04-28 17:47
567 查看
正则表达式知识详解系列,通过代码示例来说明正则表达式知识
源代码下载地址:http://download.csdn.net/detail/gnail_oug/9504094
示例功能:
1、匹配转义空格
2、判断IP地址是否合法
运行结果:
位置:[5,17]
位置:[28,46]
==========匹配IP地址==========
----------普通方式----------
121.22.125.32 位置:[0,13]
1.212.5.132 位置:[14,25]
----------子表达式方式----------
121.22.125.32 位置:[0,13]
1.212.5.132 位置:[14,25]
----------匹配合法的IP地址----------
121.22.125.32 位置:[0,13]
10.212.5.132 位置:[14,26]
源代码下载地址:http://download.csdn.net/detail/gnail_oug/9504094
示例功能:
1、匹配转义空格
2、判断IP地址是否合法
/** * 子表达式 * 子表达式是一个更大的表达式的一部分,子表达式必须用小括号()括起来,要当成一个独立元素来使用 * @date 2016-04-20 15:53:40 * @author sgl */ public static void subexpression(){ //注意里面的空格 ,假如要匹配两个 以上的空格 String str="hello world,hello java"; //不使用子表达式,匹配不到值,因为 {2,}匹配类似于 ;;;;;;的字符串,而不是 //{2,}只对前面的;分号有效 Pattern p=Pattern.compile(" {2,}"); Matcher m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" 位置:["+m.start()+","+m.end()+"]"); } //使用子表达式,将 作为一个整体 p=Pattern.compile("( ){2,}"); m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" 位置:["+m.start()+","+m.end()+"]"); } //匹配ip地址(这里我不考虑大于255的情况,只要是1-3个数字都匹配) str="121.22.125.32,1.212.5.132"; System.out.println("==========匹配IP地址=========="); //普通方式匹配 System.out.println("----------普通方式----------"); p=Pattern.compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"); m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" 位置:["+m.start()+","+m.end()+"]"); } //子表达式方式匹配 System.out.println("----------子表达式方式----------"); //由于上面的正则表达式中\\d{1,3}\\.重复了3次,所以可以用子表达式简化,匹配结果与上面相同 p=Pattern.compile("(\\d{1,3}\\.){3}\\d{1,3}"); m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" 位置:["+m.start()+","+m.end()+"]"); } //上面匹配 空格和匹配IP的两个例子,都使用了子表达式,子表达式其中一个用途就是把多个元字符或字符用小括号 //括起来,作为一个整体(可以当成一个字符理解),方便使用* + {n,m}等规则 //子表达式也可以嵌套使用,下面还是通过匹配IP(不匹配大于255的IP)的例子来说明 //合法IP地址的规则: //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 System.out.println("----------匹配合法的IP地址----------"); str="121.22.125.32,10.212.5.132,260.33.22.44,23.45.600.4"; //这里IP两边增加了边界匹配,如果不加类似于260.33.22.44可以匹配到60.33.22.44 p=Pattern.compile("\\b((\\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"); m=p.matcher(str); while(m.find()){ System.out.println(m.group()+" 位置:["+m.start()+","+m.end()+"]"); } }
运行结果:
位置:[5,17]
位置:[28,46]
==========匹配IP地址==========
----------普通方式----------
121.22.125.32 位置:[0,13]
1.212.5.132 位置:[14,25]
----------子表达式方式----------
121.22.125.32 位置:[0,13]
1.212.5.132 位置:[14,25]
----------匹配合法的IP地址----------
121.22.125.32 位置:[0,13]
10.212.5.132 位置:[14,26]
相关文章推荐
- Java中的@SuppressWarnings
- 《JAVA与模式》之合成模式
- java编程中'为了性能'一些尽量做到的地方
- (HBase) Error: JAVA_HOME is not set and Java could not be found
- 《JAVA与模式》之门面模式
- 关于struts2标签嵌套问题
- 线性查找---JAVA实现
- 非常经典的JAVA编程题(素数)
- JavaBean和EJB的区别
- 关于java的递归写法,经典的Fibonacci数的问题
- NIO java
- Struts国际化
- JAVA 判断一个字符串是不是一个合法的日期格式
- 一个简单RPC,java实现
- 非常经典的JAVA编程题(兔子规律)
- java实现等比例缩略图
- 《JAVA与模式》之访问者模式
- Reentrantlock源码剖析--菜鸟一枚,鼓励指正
- 实现ThreadLocal功能
- 个人博客系统--项目实战