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

深刻理解正则表达式的"组"以及"?:"

2016-08-16 20:00 197 查看
一、正则表达式组的概念:

Groups

Group是指里用括号括起来的,能被后面的表达式调用的正则表达式。Group 0 表示整个表达式,group 1表示第一个被括起来的group,以此类推。所以;

A(B(C))D

里面有三个group:group 0是ABCD, group 1是BC,group 2是C。

二、?:的理解—取消所在括号的组:

有点难以理解,直接通过小demo来讲解。

public static void main(String[] args) {
String reg = "(\\d{1,3}(.*?)\\d{2}([a-z]{3}))";
Pattern p = Pattern.compile(reg);//
Matcher m = p.matcher("123abc45def");
System.out.println("group count = "+m.groupCount());
if(m.matches()){
System.out.println("结果:"+m.group(2));
}else{
System.out.println("not found");
}
}


分析如下:

如果不加 ?:则有3个组:

group(1)—–123abc45def

group(2)—–abc

group(3)—–def

如果在最外面的括号中加入?:如String reg = “(?:\d{1,3}(.*?)\d{2}([a-z]{3}))”,则只有2个组了,?:取消它所在的括号的组。

此时,group(1)—abc, group(2)—def;

如果在第二个括号里加入?:,则表示取消该括号的组,此时只有两个组。

如:String reg = “(\d{1,3}(?:.*?)\d{2}([a-z]{3}))”;

则group(1)—–123abc45def

group(2)——def.

如果加入两个?:,如:String reg = “(?:\d{1,3}(?:.*?)\d{2}([a-z]{3}))

则,只剩下一个组了,即group(1)—def。

这是我的个人理解,不正之处,请斧正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐