Если вы настаиваете на том, чтобы делать это с помощью регулярных выражений, вы можете попробовать использовать \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]"
person
polygenelubricants
schedule
21.05.2010
Regex
по определению....Regular languages
по определению... конечно, но однозначного регулярного выражения не существует. Вы правы, что люди злоупотребляют регулярными выражениями для подобных вещей. - person polygenelubricants   schedule 21.05.2010