正则表达式边用边学(一)——分组、捕获

近来对正则表达式有了浓厚的兴趣,索性加上先前模糊的记忆来次练习,在使用中学习.

1.问题

将url为"http://user:pass@api.data.sina.com.cn:80/about-me/afb/afc/service.cgi?t=100102&a=123#hash"按照协议,域名,路径,文件,参数,片段进行匹配.

2.分析

在这里先介绍一下分组的意义,取多组数据时,可以使用()进行分组,在java中匹配可以通过group(序号)来进行匹配.jdk7中已经增加了通过组命名的方式来匹配,之前的版本还不支持.

先考虑一下如何匹配http这个协议,可以通过

1 ^([^:]+)://

来匹配,^表示非,非:的多个字符,后面跟着://

^([^:]+)://(?:([^:@]+):?([^@]+)@)?([^:/?]+):?(\\d*)?/(.*)/([^\\?#]+)\\??([^#]+)#?(.*)$

这样可以通过java中的api输出

 1      String url = "http://user:pass@api.data.sina.com.cn:80/about-me/afb/afc/service.cgi?t=100102&a=123#hash";
 2         Pattern p = Pattern.compile("^([^:]+)://(?:([^:@]+):?([^@]+)@)?([^:/?]+):?(\\d*)?/(.*)/([^\\?#]+)\\??([^#]+)#?(.*)$");
 3         Matcher m = p.matcher(url);
 4         if (m.find()) {
 5             System.out.println(m.group(1));
 6             System.out.println(m.group(2));
 7             System.out.println(m.group(3));
 8             System.out.println(m.group(4));
 9             System.out.println(m.group(5));
10             System.out.println(m.group(6));
11             System.out.println(m.group(7));
12             System.out.println(m.group(8));
13             System.out.println(m.group(9));
14         }

 

 

posted @ 2014-02-13 21:18  葛一凡  阅读(260)  评论(0编辑  收藏  举报