java正则表达式,从字符串中取出时间

时间:2013-11-17 10:47:10

标签: java regex

我是java中的regex新手。

我有一个字符串“下午2:05 - 下午2:40” 我需要使用正则表达式从单个字符串中获取“下午2:05”和“下午2:40”

我正在使用跟随正则表达式,但我在某处出错,不知道在哪里

public static void main(String args[])
{
    Pattern MY_PATTERN = Pattern.compile("(\\d+)[:](\\d+)(\\s*)((am?)|(pm?))");
    String s = "2:05pm - 2:40pm";
    Matcher m = MY_PATTERN.matcher(s);
    int i=1;
    while (m.find()) {
        System.out.println(m.group(i++));
    }
}

1 个答案:

答案 0 :(得分:1)

您对group的使用是错误的:您必须始终使用group(0),这是指整个当前匹配。

总的来说,你的正则表达式太复杂了,这就足够了:

"\\d+:\\d+\\s*(a|p)m?"

适用于您希望接受1:10 a1:10p但不接受1:10等输入的情况。否则你应该使用它:

"\\d+:\\d+\\s*(am|pm)?"

将接受1:101:10 am,但不接受1:10 a

如果您要验证最多两位数,请使用\\d{1,2},现在使用\\d+