无效的转义序列(有效转义序列为\ b \ t \ n \ f \ r \“\ \ \ \)

时间:2013-04-23 20:52:08

标签: java regex

我在java中使用正则表达式时遇到问题。

当我尝试使用这个正则表达式时:

 ^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$  

我收到以下错误

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

我不知道如何处理这个错误。 我已经尝试将反斜杠加倍,但它没有用。 我希望有人可以帮助我。

谢谢

3 个答案:

答案 0 :(得分:10)

这应该有效^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$

原因是错误消息中列出的符号具有特殊含义,但\d不是使用\定义的特殊符号之一,这意味着您必须将其转义(通过添加符号前面的额外\

答案 1 :(得分:7)

每当您在Java中编写正则表达式时,请记住转义定义正则表达式的字符串中使用的\个字符。换句话说,如果您的正则表达式包含一个\,那么您必须编写两个\\。例如,您的代码应如下所示:

^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$  

为什么,你问?因为在Java的字符串中,\是用于表示特殊字符的转义字符(例如:制表符,新行等),如果字符串包含\,那么它必须通过预先转义来转义在它前面的另一个\。因此,\\

对于记录,here是Java语言规范页面,列出了有效的转义字符及其含义,请注意最后一个:

\b  backspace
\t  horizontal tab
\n  linefeed
\f  form feed
\r  carriage return
\"  double quote
\'  single quote
\\  backslash

答案 2 :(得分:1)

您可以将notepad ++与find一起使用,并将其替换为//