码迷,mamicode.com
首页 > 编程语言 > 详细

深入入门正则表达式(java) - 命名捕获

时间:2015-10-25 22:37:34      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:regex   java   命名捕获   

深入入门正则表达式(java) - 引言

深入入门正则表达式(java) - 1 - 入门基础 
深入入门正则表达式(java) - 2 - 基本实例

深入入门正则表达式(java) - 3 - 正则在java中的使用

深入入门正则表达式(java) - 匹配原理 - 1 - 引擎分类与普适原则

深入入门正则表达式(java) - 匹配原理 - 2 - 回溯

深入入门正则表达式(java) - 命名捕获

 

很多正则引擎都支持命名分组,java是在java7中才引入这个特性,语法与.Net类似(.Net允许同一表达式出现名字相同的分组,java不允许)。

命名分组很好理解,就是给分组进行命名。下面简单演示一下java中如何使用以及注意事项。

 

1.正则中定义名为NAME的分组

(?<NAME>X)

这里X为我们要匹配的内容,注意,在这个命名不能重复,名字也不能以数字开头!

 

2.反向引用NAME组所匹配到的内容

\k<NAME>

注意,反向引用是针对组所匹配到的内容,而非组的表达式。

 

3.替换中,引用组NAME中捕获到的字符串

${NAME}

 

4.获取NAME组捕获的字符串

group(String NAME)

注意:也可以使用序号对命名捕获进行引用,序号从1开始,0为正则的完整匹配结果。

 

下面用一个简单的正则来分别获取年月日为例:

技术分享

String s = "2015-10-26";
Pattern p = Pattern.compile("(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})");
Matcher m = p.matcher(s);
if (m.find()) {
	System.out.println("year: " + m.group("year")); //年
	System.out.println("month: " + m.group("month")); //月
	System.out.println("day: " + m.group("day")); //日
	  
	System.out.println("year: " + m.group(1)); //第一组
	System.out.println("month: " + m.group(2)); //第二组
	System.out.println("day: " + m.group(3)); //第三组
}

System.out.println(s.replaceAll("(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})", "${day}-${month}-${year}")); //将 年-月-日 形式的日期改为 日-月-年 形式

输出结果

year: 2015
month: 10
day: 26
year: 2015
month: 10
day: 26
26-10-2015

 

 

转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/

版权声明:本文为博主原创文章,未经博主允许不得转载。

深入入门正则表达式(java) - 命名捕获

标签:regex   java   命名捕获   

原文地址:http://blog.csdn.net/su1216/article/details/49407381

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!