正規表現でこれを行うことを主張する場合は\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]"