我读过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: "));
并在控制台中编写模式,然后程序运行正常。为什么我不能像第一个程序那样使用模式,有没有办法解决它?
答案 0 :(得分:7)
您希望将此文本转换为字符串:
([A-Z][a-zA-Z]+)\s+\1
但是,Java源代码中字符串文字中的\
是用于转义的字符(例如“\ t”表示选项卡)。因此,您需要在字符串文字中使用“\”,以在结果字符串中以单个反斜杠结束。所以你想要:
"([A-Z][a-zA-Z]+)\\s+\\1"
请注意,没有任何特定于正则表达式的内容。 任何时间要表达包含Java字符串文字中反斜杠的字符串,您需要转义该反斜杠。正则表达式和Windows文件名只是最常见的情况。