RegEx在“收件人:通过”电子邮件标题中匹配时间

在我的网站所在的共享主机上,我有一个电子邮件转发器,它将短信作为短信发送到我的手机。然而最近,它已经变得有点失控了。

我希望在cPanel中使用“用户级别过滤”,我可以设置一个基于RegEx的过滤器,只在07:00:00和22点之间将电子邮件转发到我的手机:00:00。

此过滤器将匹配以下电子邮件标题,通常出现在消息源中的2-3行:

Received: by 99.99.99.99 with SMTP id XyXyXyXyXyXyXy;
        Tue, 15 May 2012 01:22:33

...这是我希望它能够工作的方式:

Received: by (ANY IP) with (ANYTHING) id (ANYTHING);
        (Sun|Mon|Tue|Wed|Thu|Fri|Sat), (ANY DATE/MONTH/YEAR) (RegEx magic to match time?)

当比赛成功时(例如,如果时间在07:00:00和22:00:00之间),则该消息将被发送到我的电话,否则它将不会执行任何操作。 (当然,这与RegEx本身无关。)

我是一个正则表达式n00b,但已经设计了以下(非工作)正则表达式,并且不知道我距离它有多远或多远:

\bReceived: by (.*) with [a-Z] id (.*)(Sun|Mon|Tue|Weds|Thu|Fri|Sat),(.*)[0-2][2-7]:[0-2][0-9]:[0-2][0-9]\bsi

任何想法,建议或创意解决方案?我的托管服务人员告诉我,cPanel中的RegEx需要使用PERL格式。

1
额外 编辑
意见: 1

2 答案

已修复使用 http://gskinner.com/RegExr/ 工作,仍然很不理想。告诉你是否想进一步深入。

\bReceived: by (.*) with \w+ id (.*);\s*(Sun|Mon|Tue|Weds|Thu|Fri|Sat),\s*(\d+\s+\w+\s+\d+)\s+[0-2][0-9]:[0-5][0-9]:[0-5][0-9]\b
1
额外

修改后的Eugene正则表达式;

/\bReceived: by .*?;\s*(?:Sun|Mon|Tue|Weds|Thu|Fri|Sat),\s*\d+\s+\w+\s+\d+\s+(?:0[789]|1\d|2[01]):\d\d:\d\d\b/

此版本使用非捕获分组,并将可接受的时间限制在07:00:00至21:59:59。它假定时间格式是有效的 - 理论上它会通过10:99:99的时间,但我假设你不会看到这些。

0
额外
我不得不修改这个用于cPanel,如下所示: Received:。*?; \ s *(?: Sun | Mon | Tue | Weds | Thu | Fri | Sat),\ s * \ d + \ s + \ w‌ + \ s + \ d + \ s +(?: 0 [789] |‌ 1 \ d | 2 [01]):\ d \ d:\ d \ d ...但真的,这正是我所需要的,并且很有魅力!非常感谢你的帮助!
额外 作者 user1076122,