Why do I need two slashes in Java Regex to find a

2020-07-06 06:43发布

问题:

Just something I don't understand the full meaning behind. I understand that I need to escape any special meaning characters if I want to find them using regex. And I also read somewhere that you need to escape the backslash in Java if it's inside a String literal. My question though is if I "escape" the backslash, doesn't it lose its meaning? So then it wouldn't be able to escape the following plus symbol?

Throws an error (but shouldn't it work since that's how you escape those special characters?):

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

Works:

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

Hopefully that makes sense. I'm just trying to understand the functionality behind why I need those extra slashes when the regex tutorials I've read don't mention them. And things like "\+" should find the plus symbol.

回答1:

There are two "escapings" going on here. The first backslash is to escape the second backslash for the Java language, to create an actual backslash character. The backslash character is what escapes the + or the s for interpretation by the regular expression engine. That's why you need two backslashes -- one for Java, one for the regular expression engine. With only one backslash, Java reports \s and \+ as illegal escape characters -- not for regular expressions, but for an actual character in the Java language.



回答2:

Funda behind extra slashes is that , first slash '\' is escape for the string and second slash '\' is escape for the regex.