日期的正则表达式,有什么不对??

[b]只是判断一个字符串是不是以“yyyy-mm-dd”的格式输入的
我写了一个貌似不对
"[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}"[b][/b][/b]
[b]问题补充:[/b]

String[] dataArr5 = { "1984-10-20", "2008-03-12", "boon", "buin" ,"bynn"};

for (String str5 : dataArr5) {

String patternStr="^((((19){1}|(20){1})d{2})|d{2})[-\s]{1}[01]{1}d{1}[-\s]{1}[0-3]{1}d{1}$";

boolean result5 = Pattern.matches(patternStr, str5);

if (result) {
System.out.println("字符串"+str5+"匹配模式"+patternStr+"成功");

}

else{

System.out.println("字符串"+str5+"匹配模式"+patternStr+"失败");

}
怎么结果都是失败阿

我是个初学者
没学过正则表达式
谢谢了

这个应该行了
String patternStr = "^((((19){1}|(20){1})(\d){2})|(\d){2})[-\s]{1}[01]{1}(\d){1}[-\s]{1}[0-3]{1}(\d){1}$";

测试了一把, 能匹配比较正规的日期
[code="java"]
public void testRegex() {
assertTrue(Pattern.compile("[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}").matcher("2008-08-08").matches());
assertFalse(Pattern.compile("[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}").matcher("a008-08-08").matches());
assertTrue(Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}").matcher("2008-08-08").matches());
assertFalse(Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}").matcher("a008-08-08").matches());
}
[/code]

但显然不够严密, 贴一个由不知名的仁兄贡献的日期正则:

[code="java"]

/**
* 匹配日期

*
* 格式(首位不为0): XXXX-XX-XX 或 XXXX XX XX 或 XXXX-X-X

*
* 范围:1900--2099

*
* 匹配 : 2005-04-04

*
* 不匹配: 01-01-01
*
*/
public static final String date_regexp = "^((((19){1}|(20){1})d{2})|d{2})[-\s]{1}[01]{1}d{1}[-\s]{1}[0-3]{1}d{1}$";// 匹配日期

[/code]

对不起, 我试了下,的确有问题!
你可以参考下java.util.regex.Pattern的JavaDoc将这个正则改一下, 上面介绍的很详细!

d{2}这个有问题,是指字符d

这个也有问题。。。。。。他的月份和日期check的还是不完善。。。。

唔。。。这个是判断XXXX-XX-XX 或 XXXX XX XX 或 XXXX-X-X格式的正则,不好意思,看错了,按上面的改,应该没问题了