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

3

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

使用反向引用编写一个表达式,只匹配姓和名相同的人的名称。

我编写了下面的程序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
在字符串中,需要对 \ 进行转义。可以使用 \ 。代码变为 Pattern.compile("([A-Z][a-zA-Z]+)\s+\1"); - Narendra Yadala
1个回答

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

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

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

然而,在Java源代码中的字符串字面量中,\是用于转义的字符(例如,"\t"表示制表符)。因此,您需要在字符串字面量中使用“\”才能得到最终字符串中的单个反斜杠。因此,您需要这样写:
"([A-Z][a-zA-Z]+)\\s+\\1"

请注意,这与正则表达式无关。在Java字符串常量中表示包含反斜杠的字符串时,您需要转义该反斜杠。正则表达式和Windows文件名只是最常见的情况。

Java啊Java,你什么时候才能有原样字符串呢? - NullUserException
@NullUserExceptionఠ_ఠ... 如果只是可能在Java 10、11或12中实现吗?还是我记得在某个地方读到过这被认为是“语法糖”或类似的东西? - Code Jockey
@CodeJockey 你是不是指的是“语法糖”? - NullUserException
@NullUserExceptionఠ_ఠ - 是的!我知道它听起来不太对,但有点接近(而且我懒得花时间在谷歌上输入它)。 - Code Jockey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接