Java正则表达式中的非法转义字符错误

use*_*259 2 java regex

我已经阅读了手册,最后有一个练习:

仅当该人的名字和姓氏相同时,才使用反向引用来编写与人名相匹配的表达式.

我写了下一个程序http://pastebin.com/YkuUuP5M
但是当我编译它时,我收到一个错误:

PersonName.java:18: illegal escape character
p = Pattern.compile("([A-Z][a-zA-Z]+)\s+\1");
                                      ^
Run Code Online (Sandbox Code Playgroud)

如果我以这种方式重写18行:

pattern = Pattern.compile(console.readLine("%nEnter your regex: "));
Run Code Online (Sandbox Code Playgroud)

并在控制台中编写模式,然后程序运行正常.为什么我不能像第一个程序一样使用该模式,是否有某种方法来解决它?

Jon*_*eet 7

您希望将此文本转换为字符串:

([A-Z][a-zA-Z]+)\s+\1
Run Code Online (Sandbox Code Playgroud)

但是,\在Java源代码中的字符串文字中是用于转义的字符(例如,"\ t"表示选项卡).因此,您需要在字符串文字中使用"\",以在结果字符串中以单个反斜杠结束.所以你要:

"([A-Z][a-zA-Z]+)\\s+\\1"
Run Code Online (Sandbox Code Playgroud)

请注意,没有任何特定于正则表达式的内容.任何你想表达包含在Java字符串文字反斜杠的字符串时,你需要转义反斜线.正则表达式和Windows文件名只是最常见的情况.