为什么在 Java 正则表达式中需要两个反斜杠才能找到“+”符号?

问题描述 投票:0回答:2

只是我不明白背后的全部含义。我知道如果我想使用正则表达式找到它们,我需要转义任何特殊含义的字符。我还在某处读到,如果 Java 中的反斜杠位于字符串文字中,则需要对其进行转义。但我的问题是,如果我“转义”反斜杠,它不会失去意义吗?那么它就无法转义下面的加号了?

抛出一个错误(但它不应该工作,因为这就是你转义这些特殊字符的方式?):

replaceAll("\+\s", ""));

作品:

replaceAll("\\+\\s", ""));

希望这是有道理的。我只是想了解为什么我需要这些额外的斜杠背后的功能,而我读过的正则表达式教程没有提及它们。像

"\+"
这样的东西应该找到加号。

java regex escaping
2个回答
22
投票

这里发生了两次“逃亡”。第一个反斜杠用于转义 Java 语言的第二个反斜杠,以创建实际的反斜杠字符。反斜杠字符是转义

+
s
以便由正则表达式引擎解释的字符。这就是为什么需要两个反斜杠——一个用于 Java,一个用于正则表达式引擎。仅使用一个反斜杠,Java 将
\s
\+
报告为非法转义字符——不是针对正则表达式,而是针对 Java 语言中的实际字符。


1
投票

额外斜杠背后的基本原理是,第一个斜杠“\”是字符串的转义,第二个斜杠“\”是正则表达式的转义。

© www.soinside.com 2019 - 2024. All rights reserved.