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