【发布时间】:2012-08-13 23:54:22
【问题描述】:
我正在编写一个正则表达式来查找像“6 月 27 日”这样的所有日期
同时我只想要 2012 年的“6 月 27 日”,而不是其他任何一年
所以“2007 年 6 月 27 日”中的“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”,则正则表达式有效,即它不会捕获日期字符串。
有人可以帮忙吗?
【问题讨论】:
-
你能给我们一个输入和期望输出的例子吗?
-
您当前的正则表达式比您所要求的要复杂得多 - 即它使用分组、查找其他内容等。您需要正则表达式匹配什么?
-
同意。例如:当您可以匹配单词边界时,为什么要查找非单词字符?
-
feb 31th, 2007怎么样?正则表达式是个坏主意。