什么是组
\\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
依次类推
原文链接:https://www.f2er.com/regex/362244.html