如果您坚持使用正则表达式执行此操作,那么您可以尝试\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]"