我在使用正则表达式方面需要帮助。我读过 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 为任何整数) 而不仅仅是\0 和\1 和\2。
有什么想法吗?
已解决: 我发现测试中的问题是我使用了自己生成的字符串。在数值前使用\1 使得 String 自动包含\1k 作为字符而不是\1。从我的来源读取时,它以字节为单位,因此具有正确的\1 编码。在解码和重新编码(手动)时,我犯了错误。使用原始数据解决了这个问题。
或者,我使用 unicode\u0001-\u0002 重新编码,效果也不错。 感谢所有的答案。学习了一些有关 Regex 和 unicode 的知识。
最佳答案
尝试使用 Unicode 字 rune 字形式 (\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"];
关于java - 你如何使用正则表达式按 unicode 字符拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6988027/