gpt4 book ai didi

java - 在字符串中查找日期

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:21 25 4
gpt4 key购买 nike

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

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”。我该怎么做?

最佳答案

您的示例输入包含月份中的个位数天数,这是您的正则表达式所不允许的;它将匹配“11/03/14”,但不匹配“11/3/14”。

如果您想匹配单位数字,我认为您的 0[1-9] 应该是 0?[1-9]

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])"
)

或者您可以添加一个负向后查找,以确保您不会匹配较大数字中间的月份,并将其简化为

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.
)

当然,如果您为非美国用户提供服务,假设月/日/年排序是有问题的。

如果您还没有这样做,请参阅 "Falsehoods programmers believe about time" .

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

关于java - 在字符串中查找日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com