求yyyy年mm月dd日的正则表达式

tjzero_sapce 2015-09-30 10:01:21
这是2012-11-12 的匹配正则表达式
[0-9]{4}-(((0[13578]|(10|12))-(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))
请教yyyy年mm月dd日的正则表达式该怎么写
...全文
1299 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjzero_sapce 2015-10-15
  • 打赏
  • 举报
回复
谢谢了 已经搞定 大家都有分
番茄鲨鱼面 2015-10-10
  • 打赏
  • 举报
回复
少年,try try this

public class Test {
	public void test(String parm){
		// 没加时间验证的YYYY-MM-DD
		String regex = "^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(parm);
		System.out.println(parm + ":" + m.matches());
	}
	public static void main(String[] args) {
		Test t = new Test();
		t.test("2015-10-10");
		t.test("2008-2-29");
		t.test("2008-2-28");
		t.test("2015-13-10");
		t.test("2015-1-35");
	}
}
rickylin86 2015-10-07
  • 打赏
  • 举报
回复
如果题目要求的是 yyyy年mm月dd日 的格式的话那么用如下的

//package net.csdn.question;

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Test{
	public static void main(String[] args){
		String year = "^\\d+年";
		String md31 = "((0[13578]|1[02])月(0[1-9]|[12]\\d|3[01])日$)";
        String md30 = "((0[469]|11)月(0[1-9]|[12]\\d|30)日$)";
		String md_2_Leap = "(02月(0[1-9]|[12]\\d)日$)";
		String md_2_NLeap = "(02月(0[1-9]|1\\d|2[0-8])日$)";
		String leap = year + "(" + md31 + "|" + md30 + "|" + md_2_Leap + ")";//这个是闰年的
		String noLeap = year + "(" + md31 + "|" + md30 + "|" + md_2_NLeap + ")";//这个是非闰年的

		String date = "2012年02月29日";
		Pattern pattern = Pattern.compile(leap);//这里根据需要加载对应是否闰年的表达式
		Matcher matcher = pattern.matcher(date);
		if(matcher.matches()){
			System.out.println("\"" + date + "\" is valid date!");
			System.exit(0);
		}

		System.out.println("\"" + date + "\" isn't valid date!");
	}
}
零度六度 2015-10-06
  • 打赏
  • 举报
回复
如果不是很严格的话就直接用最简单的就行了,如果一定要限制死的话,你要考虑闰年,月份等这种要求的话,单独的一个正则很难表达
rickylin86 2015-10-05
  • 打赏
  • 举报
回复

package net.csdn.question;
//http://bbs.csdn.net/topics/391836999

//判断日期形势是否有效:假设日期形式为: yyyy-mm-dd(注:这里的yyyy不一定是四位数)
//主要需要判断年份是否为闰年,然后对闰年及非闰年进行分开判断有效性

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateFormatValid {
	public static void main(String[] args) {
		String[] dates = new String[7];
		dates[0] = "12452-July-3th";// 不符合yyyy-mm-dd格式 Invalid
		dates[1] = "2015-10-32";// 日期超过31 Invalid
		dates[2] = "2015-13-21";// 月份超过12 Invalid
		dates[3] = "2015-02-29";// 非闰年,二月份29 Invalid
		dates[4] = "2012-02-29";// 闰年,二月份29 Valid
		dates[5] = "2015-01-31";// 一月份31 Valid
		dates[6] = "2015-04-30";// 四月份30 Valid
		String date = null;
		for (int i = 0; i < dates.length;) {
			date = dates[i];
			System.out.print((++i) + ": ");
			if (isValid(date)) {
				System.out.println("\"" + date + "\" 是有效的日期!");
			} else {
				System.out.println("\"" + date + "\" 不是有效日期!");
			}
		}
	}

	public static boolean isValid(String date) {
		String regex = "(\\d+)-\\d{2}-\\d{2}";
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(date);
		if (!matcher.matches()) {
			System.out.print("你所提供的数据:\"" + date + "\" 不符合标准格式yyyy-mm-dd  ");
			return false;
		}
		String year = matcher.group(1);
		boolean isLeapYear = isLeapYear(year);
		year = "^\\d+-";
		String md31 = "((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])$)";
		String md30 = "((0[469]|11)-(0[1-9]|[12]\\d|30)$)";
		String md_2 = null;
		if (isLeapYear) {
			md_2 = "(02-(0[1-9]|[12]\\d)$)";
		} else {
			md_2 = "(02-(0[1-9]|1\\d|2[0-8])$)";
		}
		regex = year + "(" + md31 + "|" + md30 + "|" + md_2 + ")";
		pattern = Pattern.compile(regex);
		matcher = pattern.matcher(date);
		return matcher.matches();
	}

	public static boolean isLeapYear(String year) {
		return (int) new Integer(year) % 4 == 0;
	}
}

rickylin86 2015-10-05
  • 打赏
  • 举报
回复
[code=java package net.csdn.question; //http://bbs.csdn.net/topics/391836999 //判断日期形势是否有效:假设日期形式为: yyyy-mm-dd(注:这里的yyyy不一定是四位数) //主要需要判断年份是否为闰年,然后对闰年及非闰年进行分开判断有效性 import java.util.regex.Matcher; import java.util.regex.Pattern; public class DateFormatValid { public static void main(String[] args) { String[] dates = new String[7]; dates[0] = "12452-July-3th";// 不符合yyyy-mm-dd格式 Invalid dates[1] = "2015-10-32";// 日期超过31 Invalid dates[2] = "2015-13-21";// 月份超过12 Invalid dates[3] = "2015-02-29";// 非闰年,二月份29 Invalid dates[4] = "2012-02-29";// 闰年,二月份29 Valid dates[5] = "2015-01-31";// 一月份31 Valid dates[6] = "2015-04-30";// 四月份30 Valid String date = null; for (int i = 0; i < dates.length;) { date = dates[i]; System.out.print((++i) + ": "); if (isValid(date)) { System.out.println("\"" + date + "\" 是有效的日期!"); } else { System.out.println("\"" + date + "\" 不是有效日期!"); } } } public static boolean isValid(String date) { String regex = "(\\d+)-\\d{2}-\\d{2}"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(date); if (!matcher.matches()) { System.out.print("你所提供的数据:\"" + date + "\" 不符合标准格式yyyy-mm-dd "); return false; } String year = matcher.group(1); boolean isLeapYear = isLeapYear(year); year = "^\\d+-"; String md31 = "((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])$)"; String md30 = "((0[469]|11)-(0[1-9]|[12]\\d|30)$)"; String md_2 = null; if (isLeapYear) { md_2 = "(02-(0[1-9]|[12]\\d)$)"; } else { md_2 = "(02-(0[1-9]|1\\d|2[0-8])$)"; } regex = year + "(" + md31 + "|" + md30 + "|" + md_2 + ")"; pattern = Pattern.compile(regex); matcher = pattern.matcher(date); return matcher.matches(); } public static boolean isLeapYear(String year) { return (int) new Integer(year) % 4 == 0; } } ] [/code]
scmod 2015-10-02
  • 打赏
  • 举报
回复
不知道需求是啥,在一堆东西里面找日期?.... 一般好像没用正则这个方法来匹配日期的 不然还要向楼上说的那样看闰年还要根据月份确定日期天数
rickylin86 2015-10-02
  • 打赏
  • 举报
回复
应该先判断是否是闰年.然后再对应的编写闰年和非闰年的正则即可了.
NANU-NANA 2015-10-01
  • 打赏
  • 举报
回复
可以用SimpleDateFormat("yyyy年mm月dd日")
解开者 2015-09-30
  • 打赏
  • 举报
回复
照着这个改就行了: [0-9]{4}年(((0[13578]|(10|12))月(0[1-9]|[1-2][0-9]|3[0-1]))|(02月(0[1-9]|[1-2][0-9]))|((0[469]|11)月(0[1-9]|[1-2][0-9]|30)))日

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧