【问题标题】:Regular expression pattern for the date format 1st mon/month yyyy and mon/month, 1, yyyy日期格式 1st mon/month yyyy 和 mon/month, 1, yyyy 的正则表达式模式
【发布时间】:2020-02-03 08:20:03
【问题描述】:

我有以下日期格式的正则表达式模式,但它们没有按预期工作

1st mon/month yyyy(应与 1785 年 4 月 2 日、1999 年 4 月 1 日、2000 年 4 月 3 日、1999 年 1 月 4 日类型的日期匹配)

mon/month, 1, yyyy(应与 2000 年 11 月 2 日,2000 年 11 月 4 日类型的日期匹配)

第一个星期一/月 yyyy - \s?(?:0?[1-9]|[1,2][0-9]|3[0-1])(?:nd|rd|th|st)?(?:[\s|,|]?\s?)(?:[Jj]an(?:uary)?|[Ff]eb(?:ruary)?|[Mm]ar(?:ch)?|[Aa]pr(?:il)?|[Mm]ay|[Jj]une|[Jj]uly|[Aa]ug(?:ust)?|[Ss]ept(?:ember)?|[Oo]ct(?:ober)?|[Nn]ov(?:ember)?|[Dd]ec(?:ember)?)\s\d{4}

星期一/月, 1, yyyy - \s?(?:[Jj]an(?:uary)?|[Ff]eb(?:ruary)?|[Mm]ar(?:ch)?|[Aa]pr(?:il)?|[Mm]ay|[Jj]une|[Jj]uly|[Aa]ug(?:ust)?|[Ss]ept(?:ember)?|[Oo]ct(?:ober)?|[Nn]ov(?:ember)?|[Dd]ec(?:ember)?)(?:[\s|,]?\s?)(?:0?[1-9]|[1,2][0-9]|3[0-1])(?:[\s|,]?\s?)\s\d{4}

这两种格式在一年中都占用超过 4 位数字,比如我可以给出 200000000 年 11 月 2 日,并且匹配成功,它应该只接受 4 位数字

【问题讨论】:

  • 您期望什么行为,您收到什么实际行为?请发布示例。
  • 谢谢尼克我更新了描述

标签: regex


【解决方案1】:

尝试在两个正则表达式的末尾添加\b。这会强制日期在“单词边界”处中断,这意味着如果您的数字超过四位,则正则表达式将不匹配。

  • ab\d{4} 将匹配 ab1234 并将“匹配”ab123456,直到 4 - 我假设您希望第二种情况失败,因为它的格式错误,并且数字太多。
  • ab\d{4}\b 不会匹配 ab123456,但会匹配 ab1234

【讨论】:

  • 非常感谢尼克它工作了。一个帮助我有一个匹配日期格式 dd/mm/yyyy 即 25/10/1988 的正则表达式。正则表达式模式:- \s?(?: 0?[1-9]|[1,2][0-9]|3[0-1])(?:/)(?:0?[1-9]|1[0-2])( ?:/)(?:\d{4}) 但是对于我的要求,日期前面有一个字符串,即日期是 25/10/1988 我需要使用正则表达式模式进行验证。请提出一些模式
  • 很高兴为您提供帮助!请考虑接受它的答案来解决您的问题,以便未来的读者知道什么是有效的。如果您知道日期前面的字符串中没有数字,则可以将[^\d\n]+ 放在正则表达式前面以捕获该字符串。如果您知道将出现的确切单词,则可以将date is 放在正则表达式前面以验证确切的字符串。否则,.*? 是捕获日期之前的所有内容的可能选项。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 2019-02-27
相关资源
最近更新 更多