RFC 2822 Date Regex

时间:2012-02-19 18:40:31

标签: regex preg-match

匹配RFC 2822日期的最佳正则表达式是什么?

基本上我想匹配我收到的一些电子邮件中出现的Date: Sun, 19 Feb 2012 16:25:02 +0000,但最好是与语言无关。

我确实在网上找到了以下正则表达式,但不确定如何使月语独立(但仍然与其他语言相匹配) - 我相信该月份应该是规格中的3个字符,但不完全确定......

/^(?:(Sun|Mon|Tue|Wed|Thu|Fri|Sat),\s+)?(0[1-9]|[1-2]?[0-9]|3[01])\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(19[0-9]{2}|[2-9][0-9]{3})\s+(2[0-3]|[0-1][0-9]):([0-5][0-9])(?::(60|[0-5][0-9]))?\s+([-\+][0-9]{2}[0-5][0-9]|(?:UT|GMT|(?:E|C|M|P)(?:ST|DT)|[A-IK-Z]))(\s+|\(([^\(\)]+|\\\(|\\\))*\))*$/

1 个答案:

答案 0 :(得分:0)

正如@tripleee所指出的,RFC2822的日期总是英文。但是,如果您正在解析来自不严格遵循RFC2822的源的日期,并且可能使用不同的语言,则必须识别可能使用的语言集,并制作一个匹配任何月/日的单一正则表达式来自任何一种语言的周名。之后,您可以使用哈希将捕获的月份/星期名称转换为您要使用的内部表示。