我正在尝试编写一个 Java 例程,它可以从长字符串中解析出日期,即给定字符串:
"Please have the report to me by 6/15, because the shipment comes in on 6/18"
正则表达式会找到 6/15 和 6/18。我查看过 Stack Overflow 和其他地方,大多数日期正则表达式的示例只是验证给定字符串是否是日期,而不是在大量文本中查找日期。理想情况下,我想要一个正则表达式,它可以识别人们用数字书写日期的所有主要方式,即 6/15
、6/15/12
、06/15/12
、15/6/12
、15/06/12
,尽管也许最好将它们分成不同的正则表达式,以便克拉。我是正则表达式的新手(我两天前才开始学习它们),并且正则表达式对我来说仍然有点神秘,所以我希望对任何正则表达式建议进行详细解释。
最佳答案
如果您不介意范围检查,这就足够了:
(\d{1,2})/(\d{1,2})(?:/(\d{4}|\d{2}))?
要检查您是否无法执行 2/29/2001
但可以执行 2/29/2000
,您确实希望在正则表达式完成后执行此操作这是它的工作,否则你就会被送进精神病院。
编辑:更好的是,隔离世纪,并防止像 2/193 这样的事情(由 Alex 的问题提示,尽管这是一个单独的问题):
\b(\d{1,2})/(\d{1,2})(?:/(\d{2})?(\d{2}))?\b
每场比赛您将获得 4 次捕获:[月、日、世纪、年]
,其中 世纪
和 年
可以是空。
关于java - 使用 Java 正则表达式验证长字符串中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11088530/