我正在尝试创建一个有效的 Java 正则表达式来匹配代表标准“军事时间”的字符串:
String militaryTimeRegex = "^([01]\d|2[0-3]):?([0-5]\d)$";
这给了我一个编译器错误:
无效的转义序列(有效的是 \b \t \n \f \r \" \' \ )
我哪里错了?!?
确保使用双反斜杠转义字符:
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)$";
\
在 Java 中,您需要对所有字符进行双重转义:
String militaryTimeRegex = "^([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)$";
为什么?因为\
是字符串的转义字符,如果您需要文字\
出现在字符串中的某处,那么您也必须对其进行转义:\\
.
根据错误信息\d
不存在。逃脱它\\d
虽然\d
是有效的正则表达式语法,但您需要转义 Java 字符串中的反斜杠:
String militaryTimeRegex = "^([01]\\d|2[0-3]):?([0-5]\\d)$";