看一下下边的例子。结果
2012-2-14
2015-13-35 (这样非法的就需要你自己来处理了。)
--------------------------------------------------------------------------------
import java.util.regex.Matcher
import java.util.regex.Pattern
public class Other {
public static void main(String[] args) {
String str = "本页面最后修订于2012年2月14日 (星期二) 2015-13/35日 11:29。2012-135/14<br /></li>"
Pattern p = Pattern
.compile("[0-9]{4}[年|\\-|/][0-9]{1,2}[月|\\-|/][0-9]{1,2}")
Matcher m = p.matcher(str)
while (m.find()) {
if (!"".equals(m.group())) {
String date = m.group()
date = date.replaceAll("年", "-")
date = date.replaceAll("月", "-")
date = date.replaceAll("/", "-")
System.out.println(date)
}
}
}
}
var result=data.match(/((^((1[8-9]\d{2})|([2-9]\d{3}))(\/)(10|12|0?[13578])(\/)(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(\/)(11|0?[469])(\/)(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))(\/)(0?2)(\/)(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)(\/)(0?2)(\/)(29)$)|(^([3579][26]00)(\/)(0?2)(\/)(29)$)|(^([1][89][0][48])(\/)(0?2)(\/)(29)$)|(^([2-9][0-9][0][48])(\/)(0?2)(\/)(29)$)|(^([1][89][2468][048])(\/)(0?2)(\/)(29)$)|(^([2-9][0-9][2468][048])(\/)(0?2)(\/)(29)$)|(^([1][89][13579][26])(\/)(0?2)(\/)(29)$)|(^([2-9][0-9][13579][26])(\/)(0?2)(\/)(29)$))/)将所有的(-)改成(\/)不就得了
我很久以前好像写过一个和这差不多的正则
public static void main(String[] args){
String checkValue = "20000431112230"
String year = checkValue.substring(0, 4) // 获取年份
String month = checkValue.substring(4, 6) // 获取月份
Boolean isLeap = leapYear(Integer.parseInt(year)) // 判断闰年
System.out.println(isLeap)
StringBuffer eL= new StringBuffer()
String longMonth = "01030507081012" // 31天的月份
String fix = "([2][0-3]|[0-1][0-9]|[1-9])[0-5][0-9]([0-5][0-9]|[6][0])"
if(isLeap && month.equals("02")){ // 针对2月份的情况 【闰年】
eL.append("\\d{4}([1][0-2]|[0][0-9])([2][0-1]|[1-2][0-9]|[0][1-9]|[1-9])"+fix)
}else if(!isLeap && month.equals("02")){ // 针对2月份的情况 【非闰年】
eL.append("\\d{4}([1][0-2]|[0][0-9])([2][0-1]|[1-2][0-8]|[0][1-9]|[1-9])"+fix)
}else if(longMonth.contains(month)){ // 31天月份
eL.append("\\d{4}([1][0-2]|[0][0-9])([3][0-1]|[1-2][0-9]|[0][1-9]|[1-9])"+fix)
}else{ // 30天月份
eL.append("\\d{4}([1][0-2]|[0][0-9])([3][0]|[1-2][0-9]|[0][1-9]|[1-9])"+fix)
}
Pattern p = Pattern.compile(eL.toString())
Matcher m = p.matcher(checkValue)
boolean flag = m.matches()
if(flag )
{
System.out.println("格式正确")
}
else
{
System.out.println("格式错误")
}
}
public static boolean leapYear(int year) {
Boolean isLeap = false
if (((year % 100 == 0) && (year % 400 == 0))
|| ((year % 100 != 0) && (year % 4 == 0)))
isLeap = true
return isLeap
}