Остальные ответы верны. Java Regex API не является подходящим инструментом для достижения вашей цели. Используйте эффективные, безопасные и хорошо протестированные инструменты высокого уровня, упомянутые в других ответах.
Если ваш вопрос касается скорее Regex API, чем реальной проблемы (например, в целях обучения), вы можете сделать это с помощью следующего кода:
String html = "foo <a href='link1'>bar</a> baz <a href='link2'>qux</a> foo";
Pattern p = Pattern.compile("<a href='(.*?)'>");
Matcher m = p.matcher(html);
while(m.find()) {
System.out.println(m.group(0));
System.out.println(m.group(1));
}
И вывод:
<a href='link1'>
link1
<a href='link2'>
link2
Обратите внимание, что ленивый / неохотный квалификатор *? должен использоваться для того, чтобы свести группировку к одному тегу. Группа 0 - это полное совпадение, группа 1 - следующее совпадение группы (следующая пара скобок).