public void testGroup(String text, String regexp, String[] output) { // RE2 Pattern p = Pattern.compile(regexp, options); Matcher matchString = p.matcher(utf8Slice(text)); assertEquals(true, matchString.find()); assertEquals(utf8Slice(output[0]), matchString.group()); for (int i = 0; i < output.length; i++) { assertEquals(output[i] == null ? null : utf8Slice(output[i]), matchString.group(i)); } assertEquals(output.length - 1, matchString.groupCount()); // JDK java.util.regex.Pattern pj = java.util.regex.Pattern.compile(regexp); java.util.regex.Matcher matchStringj = pj.matcher(text); // java.util.regex.Matcher matchBytes = // p.matcher(text.getBytes(Charsets.UTF_8)); assertEquals(true, matchStringj.find()); // assertEquals(true, matchBytes.find()); assertEquals(output[0], matchStringj.group()); // assertEquals(output[0], matchBytes.group()); for (int i = 0; i < output.length; i++) { assertEquals(output[i], matchStringj.group(i)); // assertEquals(output[i], matchBytes.group(i)); } }
// Tests that both RE2 and JDK's Patterns/Matchers give the same groupCount. public void testGroupCount(String pattern, int count) { // RE2 Pattern p = Pattern.compile(pattern, options); Matcher m = p.matcher(utf8Slice("x")); assertEquals(count, p.groupCount()); assertEquals(count, m.groupCount()); // JDK java.util.regex.Pattern pj = java.util.regex.Pattern.compile(pattern); java.util.regex.Matcher mj = pj.matcher("x"); // java.util.regex.Pattern doesn't have group count in JDK. assertEquals(count, mj.groupCount()); }