4

我是 Regex 的新手,我想知道是否有人可以提供帮助。我什至不确定 Regex 是否是我正在尝试做的事情的最佳选择。

我有一个正在查看的字符串数组。我想在数组中找到与各种日期格式匹配的所有项目。以下是我尝试匹配的示例格式。

2012 年 4 月 1 日 - 当天没有前导零的短月份名称 - 匹配

2012 年 4 月 1 日 - 日期前导零的短月份名称 - 匹配

2012 年 4 月 1 日 - 全文本月份名称,当天没有前导零 - 匹配

2012 年 4 月 1 日 - 日期前导零的完整文本月份名称 - 匹配

2012 年 4 月 1 日 - 月份和日期没有前导零 - 匹配

2012 年 4 月 1 日 - 月份和日期的前导零 - 匹配

2012 年 2 月 29 日 - 如果年份是飞跃,则允许 2/29 - 匹配

2001 年 13 月 12 日 - 1-12 月以外的月份 - 不匹配

2012 年 2 月 30 日 - 一个月中有太多天 - 不匹配

2011 年 2 月 29 日 - 如果不是闰年 - 不匹配

我开发的当前正则表达式。

\b(?:(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May?|Jun(?:e)?|Jul(?:y) |Aug(?:ust)?|Sep(?:t(?:ember)?)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))|(0?[1-9]|1[012])[- /.,](0?[1-9]|1[0-9]|2[0-9]|3[01])

我可以开发正则表达式来去除每种格式的各个部分,但是将它们链接在一起是这样我只会得到一个匹配项。目前它匹配两次(月,月+日)。我只希望它在整个匹配时匹配。

谢谢

有限的

4

1 回答 1

1

为什么要在一个简单的正则表达式中完成所有操作?这听起来更复杂,它应该是。此外,例如,是否考虑在未来添加新格式?这不会是直截了当的。我宁愿将类似的模式分组到一个正则表达式中,例如“2012 年 4 月 1 日”、“2012 年 4 月 1 日”在一组中,然后是“2012 年 4 月 1 日”、“2012 年 2 月 30 日”。无论如何,我想在某些时候,您需要将日期的不同组成部分处理成一个共同的表示。为此,您可能需要专用代码。

这可能不是您想要的答案,但作为一般原则,始终尝试将大问题分解为您可以轻松解决的小问题。

干杯,

何塞

于 2012-07-17T04:54:44.393 回答