9

java中的正则表达式有问题。

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

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

我收到以下错误

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

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

谢谢

4

3 回答 3

11

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

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

于 2013-04-23T20:55:15.070 回答
7

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

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

你为什么问?因为在 Java 的字符串中,\是用于表示特殊字符(例如:制表符、换行符等)的转义字符,如果字符串包含 a\那么它本身必须被转义,方法是\在它前面添加另一个。因此,\\

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

\b  backspace
\t  horizontal tab
\n  linefeed
\f  form feed
\r  carriage return
\"  double quote
\'  single quote
\\  backslash
于 2013-04-23T20:57:42.463 回答
1

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

于 2016-10-08T05:02:09.237 回答