首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字符串中查找日期

在字符串中查找日期
EN

Stack Overflow用户
提问于 2014-11-09 18:35:40
回答 1查看 174关注 0票数 1

我正在使用一些代码来查找字符串中的日期,只要稍加修改,就可以处理两年和四年的日期。

代码语言:javascript
复制
Matcher m = Pattern.compile("(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](2[0][0-9][0-9]|[0-9][0-9])").matcher(msgBody.substring(iStart));
while (m.find()) {
        allMatches[count] = m.group();
        count++;
}

它返回我正在搜索的字符串中的大多数两位数和四位数的年份日期,但当字符串包含"*Valid 11/3/14-11/9/14“时不返回结果。

我期待返回"11/3/14“的第一次发现和"11/9/14”的第二次发现。我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-09 18:46:32

您的示例输入包含月中的个位数日,这是regexp不允许的;它将匹配"11/03/14“,但不匹配"11/3/14”。

如果你想匹配个位数的话,我认为你的0[1-9]应该是0?[1-9]

代码语言:javascript
复制
Pattern.compile(
    "(0?[1-9]|1[012])"
    + "[- /.]"
    + "(0?[1-9]|[12][0-9]|3[01])"
    + "[- /.]"
    + "(2[0][0-9][0-9]|[0-9][0-9])"
)

或者,您可以添加一个负值,以确保在一个较大的数字中不匹配一个月,并将其简化为

代码语言:javascript
复制
Pattern.compile(
    "(?<![0-9])"  // Don't start match in middle of a number.
    + "(0?[1-9]|1[012])"  // Month of year
    + "[- /.]"  // Separator
    + "(0?[1-9]|[12][0-9]|3[01])"  // Day of month
    + "[- /.]"  // Separator
    + "(20[0-9][0-9]|[0-9][0-9])"  // 2 or 4 digit year
    + "(?![0-9])"  // Don't match if year continues.
)

当然,假设月/日/年的订购是有问题的,如果你是为非美国用户服务。

如果您还没有,请参见“程序员相信时间的谬误”

此外,您的代码将解析任何15岁或15岁以上的人的生日,因为他们出生于1920年。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26831789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档