RegexTool { public List<RegexResult> find(String content, String regex) { List<RegexResult> result = new ArrayList<>(); Matcher matcher = Pattern.compile(regex, Pattern.MULTILINE).matcher(content); if (matcher.find()) { for (int i = 0; i < matcher.groupCount() + 1; i++) { result.add(new RegexResult(matcher.start(i), matcher.end(i), matcher.group(i))); } } return result; }  List<RegexResult> find(String content, String regex); List<List<RegexResult>> findAll(String content, String regex); Pattern compile(String regex); String quote(String s); String quoteReplacement(String s);  }
@Test void find() { RegexTool tool = new RegexTool(); List<RegexResult> result = tool.find("<h1><span>header</span></h1> whatever", "<[hH][12].*?><span>(.*?)</span></[hH][12]>"); assertEquals(2, result.size()); assertEquals("<h1><span>header</span></h1>", result.get(0).getGroup()); assertEquals(0, result.get(0).getStart()); assertEquals(28, result.get(0).getEnd()); assertEquals("header", result.get(1).getGroup()); assertEquals(10, result.get(1).getStart()); assertEquals(16, result.get(1).getEnd()); }
@Test void findWithoutMatches() { RegexTool tool = new RegexTool(); List<RegexResult> result = tool.find("nothing here", "something"); assertEquals(0, result.size()); }