我比Regex更新,我想知道是否有人可以提供帮助。我甚至不确定Regex是否是我想要做的最佳选择。
我正在浏览一个字符串数组。我想找到数组中与各种日期格式匹配的所有项目。以下是我想要匹配的示例格式。
2012年4月1日 - 短日子名称,当天没有领先零 - 匹配
2012年4月1日 - 短日子名称,当日领先零 - 匹配
2012年4月1日 - 全日月份名称,当天没有前导零 - 匹配
2012年4月1日 - 全日月份名称,前一天为零 - 匹配
2012年4月1日 - 月和日没有前导零 - 匹配
04/01/2012 - 月度和日期的领先零 - 匹配
02/29/2012 - 如果年份是一个跳跃,请允许2/29 - 匹配
13/12/2001 - 1-12之外的月份 - 不匹配
02/30/2012 - 一个月内太多天 - 不匹配
02/29/2011 - 如果不是闰年 - 不匹配
我开发的当前正则表达式。
\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])
我可以开发正则表达式来检测每种格式的各个部分,但将它们链接在一起是因为我只能得到一个匹配。目前它匹配两次(月,月+日)。我只希望在整场比赛结束时匹配。
由于
jlimited
答案 0 :(得分:1)
为什么要在一个简单的正则表达式中完成所有操作?听起来应该是那么复杂。此外,例如,考虑在未来添加新格式?这不是直截了当的。我宁愿将类似的模式分组为单个正则表达式,例如“2012年4月1日”,“2012年4月1日”在一个组中,然后“04/01/2012”,“02/30/2012”。无论如何,我想在某些时候,你需要将日期的不同组成部分处理成一个共同的表示。为此,您可能需要专用代码。
这可能不是你想要的答案,但作为一般原则,总是试图将一个大问题分解成你可以轻易解决的小问题。
干杯,
何