Если вы настаиваете на этом с помощью регулярных выражений, тогда вы можете попробовать использовать \s*<[^>]*>\s*
в качестве разделителя:
String text = "foo <on> bar </on> thing <on> again</on> now";
String[] parts = text.split("\\s*<[^>]*>\\s*");
System.out.println(java.util.Arrays.toString(parts));
// "[foo, bar, thing, again, now]"
Я не уверен, что это именно то, что вам нужно, потому что это не совсем понятно.
Возможно, что-то подобное требовалось:
String text = "1<on>2</on>3<X>4</X>5<X>6</X>7<on>8</on><X>9</X>10";
String[] parts = text.split("\\s*</?on>\\s*|<[^>]*>[^>]*>");
System.out.println(java.util.Arrays.toString(parts));
// prints "[1, 2, 3, 5, 7, 8, , 10]"
Это не обрабатывает вложенные теги. Если они у вас есть, вы бы действительно хотели сбросить регулярное выражение и использовать реальный анализатор HTML.
Если вам не нужна пустая строка в середине массива, просто (?:delimiter)+
.
String text = "1<on>2</on>3<X>4</X>5<X>6</X>7<on>8</on><X>9</X>10";
String[] parts = text.split("(?:\\s*</?on>\\s*|<[^>]*>[^>]*>)+");
System.out.println(java.util.Arrays.toString(parts));
// prints "[1, 2, 3, 5, 7, 8, 10]"