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

标签 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 为任何整数) 而不仅仅是\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/

相关文章:

java - 从 Play 中生成的 getter 和 setter 中获益!框架

java - Spring Cloud 函数: How to map a Supplier to Azure function

java - 按日期对对象列表进行分组并使用 rxjava 对它们进行时间排序

Java:从文本文件字符串中替换 "[" "]"

python - 正则表达式给出元组而不是完全匹配

c++ - 为什么 c++ regex_match 函数需要在函数外部定义搜索字符串?

java - 在 android 中的 ListView 中显示详细信息的优雅方式

java - 如何在 Java 中针对 AD 对用户进行身份验证

java - 正则表达式捕获符号前后的数字

regex - django 网址正则表达式