我正在写一个正则表达式来查找所有日期,如“6月27日”
与此同时,我只想在2012年“6月27日”而不是其他任何一年
所以“6月27日”在“2007年6月27日”不应该找到,但是正则表达式确实抓住了“6月27日”
正则表达式编写如下,
((?<!\w)(january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)[\.]?\s{1,3}?((?<!(\d|:))(1[0-9]|2[0-9]|3[0-1]|0?[1-9])(st|nd|rd|th)?(?!(\d|\s{0,3}am|s\{0,3}pm|:)))(\s{0,2},?\s{0,2}(2012))?(?!(\d|\s{0,4},?\s{0,2}(1\d\d\d|200\d|2010|2011))))
如果我取消“27th”中的“th”,则正则表达式起作用,即它不会捕获日期字符串。
任何人都可以提供帮助吗?
答案 0 :(得分:0)
假设您的所有日期都在您的给定语法中,一个简单的正则表达式将是:
/^([^\d\s]+?)\s*(\d+)[stndrh]+,\s*2012$/
第一个捕获组以语言或缩写捕获月份,第二个捕获组保留月份的日期。
或者,如果您必须在长文本中匹配所有内容,请尝试以下内容:
/(?:([a-z]{3,9})\s*(\d{1,2})[stndrh]{2},\s*2012)/
相同的捕获但正则表达式更具限制性,因此它不会意外地匹配不需要的结果。