java - 使用正则表达式解析日期

标签 java regex string date

我正在使用正则表达式来解析字符串中的日期格式。它可能就像

1/1/11
01/01/11
01/01/2011
01/1/2011
1/11/2011
1/11/11
11/1/11

Java代码:

public static String getDateFromRemarks(String str) {
    String parsedDate = null;
    if (str != null) {
        String regex = ".*([0-3]?[0-9]/[0-3]?[0-9]/(?:[0-9]{2})?[0-9]{2}).*";

        Pattern pattern = Pattern.compile(regex);

        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            parsedDate = matcher.group(1);
        }
    }
    return parsedDate;
}

输入:

kjs22/12/2011 kjdflk   

输出:

2/12/2011

输入:

kjs2/12/2011 kjdflk   

输出:

2/12/2011 

我应该得到日期

22/12/2011

最佳答案

这是因为您的初始 .*。它吞噬一切然后原路返回。

由于第一个/之前的第一个数字是可选的,因此即使有两个数字,正则表达式也只满足一个数字。

将首字母 .* 更改为 [^\d]*

关于java - 使用正则表达式解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27479387/

相关文章:

string - SAS 无法识别日期格式

ruby - 如何在 Ruby 中匹配和迭代另一个字符串

java - 动态构建的复选框在滚动时被重置

java - HashMap 中的碰撞

javascript - 如何从 Botkit hears 方法中接受多个值?

c++ - 将字符串放入条件 (c++)

java - 如何按添加值的时间对TreeSet进行排序?

java - WildFly Swarm 空指针@Inject bean

java - 正则表达式从 00001 到 99999

Python:正则表达式 findall 返回一个列表,为什么尝试访问列表元素 [0] 返回错误?