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

时间:2011-11-16 15:58:07

标签: java regex

我读过the manual,最后还有一个练习:

  

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

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

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

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

pattern = Pattern.compile(console.readLine("%nEnter your regex: "));

并在控制台中编写模式,然后程序运行正常。为什么我不能像第一个程序那样使用模式,有没有办法解决它?

1 个答案:

答案 0 :(得分:7)

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

([A-Z][a-zA-Z]+)\s+\1

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

"([A-Z][a-zA-Z]+)\\s+\\1"

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