regex: How to escape backslashes and special characters?
java, regex
Solution
You just need to replace all single backslashes with double backslashes. This is complicated a bit since the `replaceAll` function on `String` really executes a regular expression and you have to first escape the backslash because it's a literal (yielding `\\`), and then escape it again because of the regular expression (yielding `\\\\`). The replacement suffers a similar fate and requires two such escape sequences making it a total of 8 backslashes:
System.out.printf("%s ~= %s ? %s %n",
args[0].replaceAll("\\\\","\\\\\\\\"), args[1], ...
Problem
Is there a way to escape ( or protect ) special characters in a regular expression? What I would like to do is to create a simple regex tester: ``` import java.util.regex.*; class TestRegex { public static void main( String ... args ) { System.out.printf("%s ~= %s ? %s %n" , args[0], args[1], Pattern.matches( args[0], args[1] ) ); } } ``` Which works great to test my patterns before plug-in them into the program: ``` $java TestRegex "\d" 1 \d ~= 1 ? true $java TestRegex "\d" 12 \d ~= 12 ? false $java TestRegex "\d+" 12 \d+ ~= 12 ? true $java TestRegex "\d+" a12 \d+ ~= a12 ? false $java TestRegex "\d+" "" \d+ ~= ? false ``` The next thing I do is to use this pattern in my program, but each time I have to manually escape it: ``` Pattern p = Pattern.compile( /*copy pasted regex here */ ); ``` And in this sample, substitute: `\d` with `\\d`. After a while this becomes very irritating . Q. How can I automatically escape these special characters?