为什么我需要在Java Regex中使用两个斜杠来查找"+"符号?

Max*_*ney 9 java regex escaping

只是我不明白背后的全部意义.我知道如果我想使用正则表达式找到它们,我需要逃避任何特殊含义字符.而且我还读到了某些地方,如果它在String文字中,你需要逃避Java中的反斜杠.我的问题是,如果我"逃避"反斜杠,它不会失去意义吗?那么它将无法逃脱以下加号?

引发错误(但不应该有效,因为这是你如何逃避这些特殊字符?):

replaceAll("\+\s", ""));
Run Code Online (Sandbox Code Playgroud)

作品:

replaceAll("\\+\\s", ""));
Run Code Online (Sandbox Code Playgroud)

希望这是有道理的.我只是想了解我为什么需要这些额外斜线的功能,因为我读过的正则表达式教程没有提到它们.这样的事情"\+"应该找到加号.

rge*_*man 18

这里有两个"逃亡".第一个反斜杠是为了逃避Java语言的第二个反斜杠,以创建一个实际的反斜杠字符.反斜杠字符是正则表达式引擎转义+s解释的内容.这就是为什么你需要两个反斜杠 - 一个用于Java,一个用于正则表达式引擎.只有一个反斜杠,Java报告\s\+非法转义字符 - 不是正则表达式,而是Java语言中的实际字符.

  • @DoubleElite,只是为了说明rgettman所说的,把它放在你的程序中,看看它打印出来的内容:`System.out.println("\\ + \\ s");` (3认同)