Java中的unicode值与正则表达式的匹配序列

Matching sequence of unicode value in Java with regular expression

我有一个文本文件,其中包含一些 unicode 字符值序列,例如

"{"\u0985\u0982\u09b6\u0998\u099f\u09bf\u09a4","\u0985\u0982\u09b6\u09be\u0982\u09b6\u09bf","\u0985\u0982\u09b6\u09be\u0999\u09cd\u0995\u09bf\u09a4","\u0985\u0982\u09b6\u09be\u09a6\u09bf","\u0985\u0982\u09b6\u09be\u09a8\u09cb"}"

我正在尝试使用 java 中的模式 class 匹配和分组引号内的值,如下所示,但找不到任何匹配项。

Pattern p = Pattern.compile("\"(\[u]{1}\w+)+\"");

Example

我真的很想找出我给定的正则表达式中的技术错误在哪里。

首先,这个位 [u]{1} 意味着你只想匹配列表中的值一次,所以你可以简单地用 u

替换它

完成后,您的正则表达式将匹配一个引号、一个斜线,然后是一个 u,然后是另一个斜线,然后是一个或多个 w,然后是一个斜线。它匹配 w 而不是单词字符,因为它前面有太多斜杠。

编码愉快!

编辑
尝试用 \\ 替换 u 之前的 \\u 在某些正则表达式中无效,因此当您输入 Java 字符串时,它可能会变成 \u,从而破坏正则表达式

试试像这样的东西:

Pattern p = Pattern.compile("\"(\\u[0-9a-f]{4})+\"");

为了匹配字符串 \u,您需要正则表达式 \u,并将该正则表达式表示为 Java 字符串文字意味着 \\u。在 u 之后必须恰好有四个十六进制数字。