//
演示非捕获组概念
import java.util.regex. * ;
public class NonCapture
... {
public static void main(String[] args)
...{
String inputStr = "abbabcd";
String patternStr = "(a(?:b*))+(c*)";
//String patternStr = "(a(b*))+(c*)";
//String patternStr = "(a)+(c*)";
// (?:b*) is a non-capturing group
// Compile and use regular expression
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.find();
if (matchFound)
...{
// Get all groups for this match
for (int i=0; i<=matcher.groupCount(); i++)
...{
String groupStr = matcher.group(i);
System.out.println("group"+i+" "+groupStr);
}
// group 0: abbabc
// group 1: ab
// group 2: c
}
System.out.println("groupCount()="+matcher.groupCount());
}
}
import java.util.regex. * ;
public class NonCapture
... {
public static void main(String[] args)
...{
String inputStr = "abbabcd";
String patternStr = "(a(?:b*))+(c*)";
//String patternStr = "(a(b*))+(c*)";
//String patternStr = "(a)+(c*)";
// (?:b*) is a non-capturing group
// Compile and use regular expression
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.find();
if (matchFound)
...{
// Get all groups for this match
for (int i=0; i<=matcher.groupCount(); i++)
...{
String groupStr = matcher.group(i);
System.out.println("group"+i+" "+groupStr);
}
// group 0: abbabc
// group 1: ab
// group 2: c
}
System.out.println("groupCount()="+matcher.groupCount());
}
}
输出结果如下图。充足可以看到,非捕获组没有计算在 groupCount()在内