I have a problem with a regex in java.
When I try to use this regex:
^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$
I g
This should work ^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$
The reason is that the listed symbols in the error message have special meaning, but \d
is not one of those defined special symbols for using \
, this means you have to escape it (by adding an extra \
in front of the symbol).
Whenever you're writing regular expressions in Java, remember to escape the \
characters used in the string that defines the regular expression. In other words, if your regular expression contains one \
, then you HAVE to write two \\
. For example, your code should look like this:
^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$
Why, you ask? because in Java's strings, \
is the escape character used to denote special characters (example: tabs, new lines, etc.) and if a string contains a \
then it must itself be escaped, by prepending another \
in front of it. Hence, \\
.
For the record, here is the Java language specification page listing the valid escape characters and their meanings, notice the last one:
\b backspace
\t horizontal tab
\n linefeed
\f form feed
\r carriage return
\" double quote
\' single quote
\\ backslash
you can use notepad++ with find / and replace with //