Вы не можете сделать это легко с помощью регулярного выражения.Конечный автомат - это машина, которая распознает регулярное выражение, его память конечна и, следовательно, не может справиться с неизвестными уровнями вложенности.
Вы должны сделать регулярное выражение, соответствующее фиксированной глубине.
Или, в качестве альтернативы, вы можете сделать свой собственный алгоритм, например, такой, он очень прост:
import java.lang.Math;
import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
String s = "<<test<>";
List <Character> l = new ArrayList <Character>();
int count = 0;
for (char e: s.toCharArray()) {
if (e == '<') {
l.add(e);
} else if (e == '>') {
if (l.size() > 0) {
l.remove(l.size() - 1);
count++;
}
}
}
System.out.println(count);
}
}