1

私の Web サイトがある共有ホストには、メッセージをテキスト メッセージとして携帯電話に送信する電子メール フォワーダーがあります。しかし、最近では、それは少し手に負えなくなってきています。

cPanel の「ユーザー レベル フィルタリング」を使用して、07:00:00 から 22:00:00 の間にのみ電子メールを電話に転送するように RegEx ベースのフィルタを設定できることを願っています。

このフィルターは、通常、メッセージ ソースの 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 形式である必要があると言われました。

4

2 に答える 2

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 の時間が経過しますが、それらは表示されないと想定しています。

于 2012-05-21T18:05:56.560 に答える
0

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
于 2012-05-21T17:57:55.767 に答える