2

我正在尝试创建一个有效的 Java 正则表达式来匹配代表标准“军事时间”的字符串:

String militaryTimeRegex = "^([01]\d|2[0-3]):?([0-5]\d)$";

这给了我一个编译器错误:

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

我哪里错了?!?

4

4 回答 4

3

确保使用双反斜杠转义字符:

String militaryTimeRegex = "^([01]\\d|2[0-3]):?([0-5]\\d)$";

单反斜杠表示转义序列的开始。您需要使用\\来获取出现在String.


要回答您的评论,您目前只匹配19:00。您需要考虑模式:00末尾的额外内容String

String militaryTimeRegex = "^([01]\\d|2[0-3]):?([0-5]\\d):?([0-5]\\d)$";
于 2013-02-08T18:56:05.057 回答
3

\在 Java 中,您需要对所有字符进行双重转义:

String militaryTimeRegex = "^([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)$";

为什么?因为\是字符串的转义字符,如果您需要文字\出现在字符串中的某处,那么您也必须对其进行转义:\\.

于 2013-02-08T18:56:18.443 回答
2

根据错误信息\d不存在。逃脱它\\d

于 2013-02-08T18:56:20.960 回答
2

虽然\d是有效的正则表达式语法,但您需要转义 Java 字符串中的反斜杠:

String militaryTimeRegex = "^([01]\\d|2[0-3]):?([0-5]\\d)$";
于 2013-02-08T18:56:51.187 回答