Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

后端 未结 3 1875
旧时难觅i
旧时难觅i 2020-12-06 11:41

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

相关标签:
3条回答
  • 2020-12-06 12:28

    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).

    0 讨论(0)
  • 2020-12-06 12:30

    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
    
    0 讨论(0)
  • 2020-12-06 12:33

    you can use notepad++ with find / and replace with //

    0 讨论(0)
提交回复
热议问题