Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 800
Max McKinney Avatar asked Aug 05 '14 18:08

Max McKinney


1 Answers

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.

like image 54
rgettman Avatar answered Sep 18 '22 16:09

rgettman