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

我在java中使用正则表达式有问题。

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

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

我收到以下错误

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

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

谢谢

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

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

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

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

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

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

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

您可以使用notepad ++与find /并替换为//