Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 第一个字符为\时正则表达式中出现错误,可与任何其他字符配合使用_Java_Regex - Fatal编程技术网

Java 第一个字符为\时正则表达式中出现错误,可与任何其他字符配合使用

Java 第一个字符为\时正则表达式中出现错误,可与任何其他字符配合使用,java,regex,Java,Regex,对于我正在做的项目,我必须读取字符串。此字符串可能包含一个或多个unicode字符的十六进制表示形式(例如“\u0161”表示“š”)。我想将这些代码转换为正确的字符表示形式 为此,我首先需要检测字符串中是否存在格式为“\uAAAA”的十六进制序列,因此我编写了以下正则表达式: Pattern classPattern = Pattern.compile("\\u[0-9a-fA-F]{4}"); Matcher classMatcher = classPattern.matcher("\\u1

对于我正在做的项目,我必须读取字符串。此字符串可能包含一个或多个unicode字符的十六进制表示形式(例如“\u0161”表示“š”)。我想将这些代码转换为正确的字符表示形式

为此,我首先需要检测字符串中是否存在格式为“\uAAAA”的十六进制序列,因此我编写了以下正则表达式:

Pattern classPattern = Pattern.compile("\\u[0-9a-fA-F]{4}");
Matcher classMatcher = classPattern.matcher("\\u1ECD");
System.out.println(classMatcher.find());
不幸的是,这会生成“java.util.regex.PatternSyntaxException:索引2附近的非法Unicode转义序列”错误

但是,如果仅出于测试目的,我将“\”替换为“@”,则正则表达式将按预期工作:

Pattern classPattern = Pattern.compile("@u[0-9a-fA-F]{4}");
Matcher classMatcher = classPattern.matcher("@u1ECD");
System.out.println(classMatcher.find());
这让我相信我在反斜杠上做错了什么。我也尝试了许多其他的序列,但没有一个成功。请提供帮助。

在Java正则表达式世界中,“\u”有一个特殊的含义,即与实际的unicode字符相匹配。你必须双倍转义
\
才能得到你想要的匹配

Pattern classPattern = Pattern.compile("\\\\u[0-9a-fA-F]{4}");
[更新]正如评论所指出的,我给出正确答案的理由是有缺陷的。

在Java正则表达式世界中,“\u”有一个特殊的含义,即与实际的unicode字符相匹配。你必须双倍转义
\
才能得到你想要的匹配

Pattern classPattern = Pattern.compile("\\\\u[0-9a-fA-F]{4}");

[更新]正如评论所指出的,我给出正确答案的推理是有缺陷的。

这与以下
u
\u
没有任何关系:将文本反斜杠编码到正则表达式中需要java文本字符串中的4个反斜杠,因为反斜杠被转义了两次——一次在java中,另一次在regex中。这确实是一个以错误的理由推荐正确事物的例子。@Bohemian:是的,你是对的,早上读得太快太早了。谢谢。它与下面的
u
\u
没有任何关系:将文本反斜杠编码到正则表达式中需要java文本字符串中的4个反斜杠,因为反斜杠被转义了两次——一次在java中,另一次在regex中。这确实是一个以错误的理由推荐正确事物的例子。@Bohemian:是的,你是对的,早上读得太快太早了。谢谢