我是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++));
}
}
答案 0 :(得分:1)
您对group
的使用是错误的:您必须始终使用group(0)
,这是指整个当前匹配。
总的来说,你的正则表达式太复杂了,这就足够了:
"\\d+:\\d+\\s*(a|p)m?"
适用于您希望接受1:10 a
和1:10p
但不接受1:10
等输入的情况。否则你应该使用它:
"\\d+:\\d+\\s*(am|pm)?"
将接受1:10
,1:10 am
,但不接受1:10 a
。
如果您要验证最多两位数,请使用\\d{1,2}
,现在使用\\d+
。