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

Ann*_*ika 9 java regex

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

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

 ^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$  
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

"Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )"  
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Uku*_*kit 10

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

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


Ósc*_*pez 7

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

^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$  
Run Code Online (Sandbox Code Playgroud)

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

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

\b  backspace
\t  horizontal tab
\n  linefeed
\f  form feed
\r  carriage return
\"  double quote
\'  single quote
\\  backslash
Run Code Online (Sandbox Code Playgroud)