微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式知识详解之子表达式 (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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐