您的位置:首页 > 编程语言 > Java开发

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

2016-04-28 17:47 567 查看
正则表达式知识详解系列,通过代码示例来说明正则表达式知识 
源代码下载地址: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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: