Why do I need two slashes in Java Regex to find a “+” symbol?

时光总嘲笑我的痴心妄想 提交于 2019-12-09 15:34:38

问题


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.



来源:https://stackoverflow.com/questions/25145793/why-do-i-need-two-slashes-in-java-regex-to-find-a-symbol

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!