Generally
To use regular expression specific characters (?+|
etc.) in their literal meaning they need to be escaped. In common regular expression this is done by a backslash \\\\
. However, as it has a special meaning in Java Strings, you have to use a double backslash \\\\
.
These two examples will not work:
"???".replaceAll ("?", "!"); //java.util.regex.PatternSyntaxException
"???".replaceAll ("\\?", "!"); //Invalid escape sequence
This example works
"???".replaceAll ("\\\\?", "!"); //"!!!"
Splitting a Pipe Delimited String
This does not return the expected result:
"a|b".split ("|"); // [a, |, b]
This returns the expected result:
"a|b".split ("\\\\|"); // [a, b]
Escaping backslash \\\\
This will give an error:
"\\\\".matches("\\\\"); // PatternSyntaxException
"\\\\".matches("\\\\\\"); // Syntax Error
This works:
"\\\\".matches("\\\\\\\\"); // true