你如何使用正则表达式通过unicode字符分割字符串?

时间:2011-08-08 20:17:44

标签: java regex

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

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

受审

String msg ="foo\0foo\0bar\2foo\1horse"
msg.split("[\1\0\2]");

以上工作完美(不确定它是否正确使用正则表达式),但

String msg ="foo\0foo\0bar\2foo\1horse\1123123\0123123\21"
msg.split("[\1\0\2]");

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

有什么想法吗?

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

或者我使用unicode \ u0001- \ u0002重新编码,这也很有用。 感谢所有的答案。学到了一些关于Regex和unicode的知识。

2 个答案:

答案 0 :(得分:3)

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

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"];

答案 1 :(得分:2)

我想你想要

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

根据http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html