什么是组
w(d{3})(.*)
通过括号可以把正则表达式分成2部分及2组
这就是组的概念
通过方法group()和group(0)是一样的表示整个正则表达式
group(1)获取上一次匹配中(d{3})所匹配的字符串
group(2)获取上一次匹配中(.*)所匹配的字符串
/** *matcher.find()matcher.matcher()区别 *find查找与正则表达式匹配的子字符串 *matcher整个字符串是否与正则表达式匹配 **/ publicclassFindAndMatcherDemo{ publicstaticvoidmain(String[]args){ Stringst="123kjh"; Patternp1=Pattern.compile("d{3}"); Patternp2=Pattern.compile("(d{3})(.*)"); Matcherm1=p1.matcher(st); Matcherm2=p2.matcher(st); //System.out.println(m1.matches()); if(m1.find()){ System.out.println(m1.group()); System.out.println(st.substring(m1.start(),m1.end())); } //System.out.println(m2.find()); if(m2.find()){ System.out.println(m2.group(1)); //System.out.println(st.substring(m1.start(),m1.end())); } m2.reset(); if(m2.matches()){ //group()根据正则表达式的组返回字符串对应的值 //m2.matches())所匹配到的字符串“123kjh”
System.out.println(m2.group()); System.out.println(m2.group(1));//获得第一组正则表达式所匹配的字符串“123” System.out.println(m2.group(2));//获得第二组正则表达式所匹配的字符串“kjh” } }
}
当括号中嵌套括号时
Stringst="SHMT19220312002"; Stringregex="((SH|GD)(MT)(d{4}d{2}d{2}))(d{3})"; Patternpattern=Pattern.compile(regex); Matchermatcher=pattern.matcher(st); if(matcher.matches()){ System.out.println(matcher.group());//SHMT19220312002
System.out.println(matcher.group(1));SHMT19220312
System.out.println(matcher.group(2));SH
System.out.println(matcher.group(3));MT
System.out.println(matcher.group(4));19220312 System.out.println(matcher.group(5));002
从以上可知当括号嵌套括号时
第一个最外层的大括号为1
里面的分别为23
然后再后面的括号为4里面的子括号依次后排5
依次类推 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|