java正则表达式中的日期模式

时间:2013-06-10 12:35:50

标签: java regex

我创建了一个包含数组列表的函数Datepattern,并添加了日期模式正则表达式 我的代码如下

private ArrayList getDatePatterns(){         ArrayList alDate = new ArrayList();

    //Thursday, the 7th December, 2006.00
    alDate.add("\\b(?i)(monday|tuesday|wednesday|thursday|friday|saturday|sunday)[ ]*[,][ ]*(the)[ ]*[0-9]+(st|th|rd|nd)?[ ]*(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]*[,][ ]*[0-9]+\\b");


    //Examples: 24th July to 3rd August, 2007  24 July to 3 August, 2007  
    alDate.add("\\b(?i)(?:0?[1-9]|[12][0-9]|3[01])(st|th|rd|nd)?([ ])?(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?(to)([ ])?(0?[1-9]|[12][0-9]|3[01])(st|th|rd|nd)?([ ])?(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]*[\\,]?([ ])*([0-9]+)?\\b");

  //Examples: 1.4.94-to-25.1.95 
   // alDate.add("\\b(?i)[0-9]+[ ]*[.][ ]*[0-9]+[ ]*[.][ ]*[0-9]+[ ]*[.][ ]*(to)[ ]*[0-9]+[ ]*[.][ ]*[0-9]+[ ]*[.][ ]*[0-9]+\\b");

    //Examples: 9th & 12th August,   9th and 12th August, 2008 9th to 12th August, 2008 9th/12th August, 2008 9th-12th August, 2008
  ////////  alDate.add("\\b(?i)(?:(from)?([ ])?0?[1-9]|[12][0-9]|3[01])[ ]*(st|th|rd|nd)?([ ])?(and|to|\\/|[\\-]|&)([ ])?(0?[1-9]|[12][0-9]|3[01])[ ]*(st|th|rd|nd)?([ ])?(of)?([ ])?(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]*[\\,]*([ ])?([0-9]+)?\\b");

    //Example : 28th July 28 July 24 July 2007 24-July-2007 24th July, 2007 24 July, 2007 24th day of July, 2007  21st of May, 2008


    alDate.add("\\b(?i)(Letter No[.]?[ |-])?(?:0?[1-9]|[12][0-9]|3[01])([\\-]|[ ])?(st|th|rd|nd)?([ ])?(day[ ]of[ ])?(of[ ])?(Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)([ ]?[\\,]?([\\-]|[ ])?([0-9]+))\\b");

    //Example :  August 24,  07; November 26-30, 2007
    alDate.add("\\b(?i)(?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?((0?[1-9]|[12][0-9]|3[01])[ ]?[-][ ]?)?(0?[1-9]|[12][0-9]|3[01])([ ])?[\\,]([ ])?([0-9]+)?\\b");

    //June 08 and June 2008; May'08 and June'08
    alDate.add("\\b(?i)(?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?([\\,\\'])?([ ])?([0-9]+)?[ ]*(and)[ ]*(?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?([\\,\\'])?([ ])?([0-9]+)?\\b");
    //Example : March, 2009;  March 2009; June-April, 2008
    alDate.add("\\b(?i)((?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?[-][ ]?)?(?:Jan[.]?|January|Feb[.]?|February|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[.]?|Sept[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)[ ]?([\\,])?([ ])?[0-9]+\\b");              

    //Examples: from dd-mm-yy to    dd-mm-yy  dd/mm/yy ,  dd.mm.yy   etc
  //  alDate.add("\\b(?i)(i[.]e[.]|viz[.]|means)\\s(from[ ])(0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+([ ]to[ ])(?:0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+\\b");
  //  alDate.add("\\b(?i)(from[ ])(0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+([ ]to[ ])(?:0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+\\b");

    // 28th Feburary
    alDate.add("\\b(?i)(the)?[ ]*[0-9]+(st|th|rd|nd)?[ ]*(Jan[.]?|January|February|Feb[.]?|Mar[.]?|March|Apr[.]?|April|May|Jun[.]?|June|Jul[.]?|July|Aug[.]?|August|Sep[t]?[.]?|September|Oct[.]?|October|Nov[.]?|November|Dec[.]?|December)");

    //Examples: dd-mm-yy    , dd/mm/yy ,  dd.mm.yy   etc
    alDate.add("\\b(?i)(?:0?[1-9]|[12][0-9]|3[01])([\\.]|[\\-]|[ \\/])+(?:0?[1-9]|1[0|1|2])([\\.]|[\\-]|[ \\/])+[0-9]+\\b");

    //2002-2003
    //alDate.add("\\b([0-9]+[\\-][0-9]+)\\b");
    return alDate;
}

而不是这个我希望一个单一的正则表达式满足所有上述条件。在评论更多的理解我提到了正则表达式遵循的日期模式。  任何人帮助我,我想为日期模式而不是这个大代码编写一个正则表达式。 我想减少代码。 谢谢你

2 个答案:

答案 0 :(得分:3)

不要使用RegEx进行日期解析,请使用SimpleDateFormat。 : - )

答案 1 :(得分:0)

不幸的是,您的问题对于您希望使用代码实现的目标非常模糊。对我来说,听起来你想要解析不同格式的日期字符串,并可能将它们转换为DateFormat.parse(String)中的Date对象。

编辑:我几乎完全确定,正则表达式不是您的代码尝试执行的任务的正确工具,但您不希望因某些原因而泄露。我很确定,你正在努力重新解决一个普遍而微妙的问题,特别是在国际化方面存在一些陷阱。通常这些可以通过一小组库函数来解决,这些函数可以保护程序员(你),这个混乱的未来维护者,以及应用程序的(探测者)用户处理上述问题及其后果。

无论如何,将RE粘合在一起会使其更难以阅读/维护。