一、正则表达式组的概念: 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。
这是我的个人理解,不正之处,请斧正。
