2013-02-08 60 views
2

我试图创建一个字符串匹配代表标准“军用时间”有效的Java正则表达式:你如何配合军事时间?

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

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

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

我要去哪里错了? ?

+0

什么是“谷歌搜索”? – IAmYourFaja 2013-02-08 18:57:32

+0

http://en.wikipedia.org/wiki/Google_(verb) – 2013-02-08 18:58:20

+0

@DirtyMikeAndTheBoys它的意思是:去http://www.google.com搜索错误 – 2013-02-08 18:58:40

回答

3

请务必使用双反斜线字符:

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

单反斜杠表示转义序列的开始。您需要使用\\,因为它出现在String得到的字符。


为了回答您的意见,您目前只匹配19:00。你需要在你的模式String年底占额外:00

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

感谢@Reimeus - 但是当我执行'布尔B = “19:00:00” .matches(militaryTimeRegex)',我得到'FALSE'。还有一些事情在这里......再次感谢! (+1) – IAmYourFaja 2013-02-08 18:59:21

+0

没错,只是重复你的最后一个匹配的组和你整理 – Reimeus 2013-02-08 19:07:39

3

在Java中,你需要仔细逃避所有\字符:

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

为什么?因为\是字符串的转义字符,并且如果您需要文字\出现在字符串内某处,那么您也必须将其转义:\\

+0

感谢@Oscar洛佩兹。 (+1) - 请在Reimeus的回答下看到我的评论 - 我对你有同样的问题! – IAmYourFaja 2013-02-08 19:01:52

+0

@DirtyMikeAndTheBoys我修正了正则表达式,请参阅我的更新回答 – 2013-02-08 19:06:14

2

根据错误信息\d不存在。与\\d

+0

谢谢@ user000001(+1) - 请参阅Reimeus'answe下的评论 - 我对您有同样的问题! – IAmYourFaja 2013-02-08 19:00:52

2

虽然\d是有效的正则表达式语法逃避它,你需要转义反斜线在Java字符串:

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

谢谢@ F.J。 (+1) - 请下Reimeus' answe我的意见 - 我有同样的问题为您服务! – IAmYourFaja 2013-02-08 19:00:28

相关问题