请帮我展示正确的输出。我怎么能得到这个,我的输出总是假的。
System.out.print("Enter Time: ");
str = scanner.nextLine();
String regextime = "((([0-1]?[0-2])|(0?[0-9])):[0-6][0-9]:[0-6][0-9][ ]?[AaPp][Mm]) | ((([2]?[0-4])|([0-1]?[0-9])):[0-6][0-9]:[0-6][0-9])";
//12 hr
//(([0-1]?[0-2])|(0?[0-9])):[0-6][0-9]:[0-6][0-9][ ]?[AaPp][Mm]
//24hr
//(([2]?[0-4])|([0-1]?[0-9])):[0-6][0-9]:[0-6][0-9]
System.out.println(str.matches(regextime));
答案 0 :(得分:1)
正则表达式模式不允许随机空格。你有两个大的正则表达式模式,中间用|
分隔。 |
每边都有一个空格。正则表达式匹配器假定这些空间是模式的一部分,所以在am
或pm
期间它需要一个尾随空格,并且在24小时内它需要一个前导空格。 / p>
将您的模式更改为:
String regextime = "((([0-1]?[0-2])|(0?[0-9])):[0-6][0-9]:[0-6][0-9][ ]?[AaPp][Mm])|((([2]?[0-4])|([0-1]?[0-9])):[0-6][0-9]:[0-6][0-9])";
或者,如果您希望保持空白以便清晰,可以在模式(?x)
中添加一个标志,告诉它忽略空格。然后,您必须转义所有要保留的空格,因此必须在\\
之前的字符类空格前添加AM/PM
。
String regextime = "(?x)((([0-1]?[0-2])|(0?[0-9])):[0-6][0-9]:[0-6][0-9][\\ ]?[AaPp][Mm]) | ((([2]?[0-4])|([0-1]?[0-9])):[0-6][0-9]:[0-6][0-9])";