正则表达式知识详解之子表达式 (java版示例)

前端之家收集整理的这篇文章主要介绍了正则表达式知识详解之子表达式 (java版示例)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
正则表达式知识详解系列,通过代码示例来说明正则表达式知识

代码下载地址: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="helloworld,hellojava";
		
		//不使用子表达式,匹配不到值,因为{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}");
		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,"+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,25]
----------匹配合法的IP地址----------
121.22.125.32   位置:[0,13]
10.212.5.132   位置:[14,26]

猜你在找的正则表达式相关文章