Java 如何使用正则表达式按unicode字符拆分字符串?

Java 如何使用正则表达式按unicode字符拆分字符串?,java,regex,Java,Regex,我需要使用正则表达式的帮助。我读了笔记,但找不到解决问题的办法 问题: 我有一个字符串,在出现unicode字符\0、\1和\2时需要拆分该字符串 尝试过了: String msg ="foo\0foo\0bar\2foo\1horse" msg.split("[\1\0\2]"); 上述方法非常有效(不确定是否正确使用regex),但是 无法正常工作,因为正则表达式似乎正在拾取\1k(k为任意整数) 而不仅仅是\0和\1和\2 有什么想法吗 已解决: 我发现测试中的问题是我使用了自己生成的字

我需要使用正则表达式的帮助。我读了笔记,但找不到解决问题的办法

问题: 我有一个字符串,在出现unicode字符\0、\1和\2时需要拆分该字符串

尝试过了

String msg ="foo\0foo\0bar\2foo\1horse"
msg.split("[\1\0\2]");
上述方法非常有效(不确定是否正确使用regex),但是

无法正常工作,因为正则表达式似乎正在拾取\1k(k为任意整数) 而不仅仅是\0和\1和\2

有什么想法吗

已解决: 我发现测试中的问题是我使用了自己生成的字符串。在数值之前使用\1使字符串自动包含\1k作为字符,而不是\1。从我的源读取时,它以字节为单位,因此编码了正确的\1。当解码和重新编码(手动)时,我犯了错误。使用原始数据解决了这个问题

或者,我使用unicode\u0001-\u0002重新输入代码,这同样有效。 谢谢你的回答。学习了一些关于正则表达式和unicode的知识。

我想你想要

msg.split("[\u0000\u0001\u0002]");
根据

我想你想要

msg.split("[\u0000\u0001\u0002]");

根据

尝试使用Unicode字符文字形式(
\uxxx
):


尝试使用Unicode字符文字形式(
\uxxx
):


我认为
\0
不能识别unicode字符。相反,
\uxxx
其中XXXX是一个十六进制数,是指定unicode转义序列的方法。这并不能解决正则表达式问题,但我可以推荐一种更标准的形式来传递此类信息,比如XML吗?您会发现这些常见问题已通过生产就绪库解决。我认为现在的JDK中甚至包括了SAX(尽管我可能错了)。我想使用更标准的东西,但这不取决于我。我需要分析的内容来自另一个我无法控制的源。请不要使用Java预处理器。@tchrist:是否愿意共享一个链接,解释为什么不使用以及如何有效避免使用该链接?我认为
\0
不能识别unicode字符。相反,
\uxxx
其中XXXX是一个十六进制数,是指定unicode转义序列的方法。这并不能解决正则表达式问题,但我可以推荐一种更标准的形式来传递此类信息,比如XML吗?您会发现这些常见问题已通过生产就绪库解决。我认为现在的JDK中甚至包括了SAX(尽管我可能错了)。我想使用更标准的东西,但这不取决于我。我需要解析的内容来自另一个我无法控制的源。请不要使用Java预处理器。@tchrist:是否愿意共享一个链接,解释为什么不使用以及如何有效避免使用该链接?请尝试在
上拆分[在
上尝试拆分][
String msg ="foo\u0000bar\u0001gah\u0002zip\u0001horse\u0001123123\u0000456456\u00021";
String ss[] = msg.split("[\u0000-\u0002]");
// ss = ["foo", "bar", "gah", "zip", "horse", "123123", "456456", "1"];