在java中解析字符串中的简单日期

时间:2012-10-16 16:25:26

标签: java regex date simpledateformat

在我的程序中,用户应该能够指定命名方案。他们指定的命名方案应该包含一个简单的日期格式,如“yyyyMMdd”,“MM-dd-yyyy”,“yyyy / MM / dd”等。我更喜欢日,月和年的顺序无关紧要但是可能需要一定的订购(比如年份先来,然后是月份,然后是白天)。我希望能够轻松地从字符串中检索这个日期,以便将它与SimpleDateFormat类一起使用。

以下是一些例子:

input string:    "abc?>@dyyyy-MM-dd-|(s*&d)"
output string:   "yyyy-MM-dd"

input string:    "daddy-MM/dd/yyyy-moMMy"
output string:   "MM/dd/yyyy"

最终我要做的是替换(在用户提供的字符串中)使用当前日期指定的日期格式。

如果我想修复它,那么用户只能输入年份,然后是月份,然后是白天,那么我可以这样做:

String dateFormat = name.substring(name.indexOf("yyyy"), name.indexOf("dd") + 2)

但这意味着用户不能在字符串的其余部分使用字符串序列“yyyy”和“dd”,否则此方法将无效。这个表达式也可以用正则表达式表示,但我不知道如何轻松地从字符串中拉出与正则表达式匹配的子字符串。

1 个答案:

答案 0 :(得分:2)

使用正则表达式

(MM|dd|yyyy)[\\/-]?(?!\\1)(MM|dd|yyyy)[\\/-]?(?!\\1)(?!\\2)(MM|dd|yyyy)

您可能希望在上述模式的[...]部分中添加一些您想要允许的其他分隔符。