2

我正在尝试匹配标题以设置在圆形立方体上的过滤器中。我发现了另一个关于此的问题,我尝试了答案,但它不起作用。

正则表达式在 RegExr 中测试时有效,但 roundcube 只是拒绝保存它。

这是我的正则表达式:\s*(?:Sun|Mon|Tue|Weds|Thu|Fri|Sat),\s*\d+\s+\w+\s+\d+\s+(?:0[12345678]|1[89]|2[0123]):\d\d:\d\d

我在这个答案中找到的,根据我的需要进行了调整:RegEx to match time in "Received: by" e-mail header

它应该在: 之间匹配时间18:00 - 09:00,它确实如此。

我不是正则表达式专家,所以有没有人可以帮助我解决这个问题?

4

2 回答 2

2

(?:...)在筛子中无效。\s//也可能不是\d\w

请参阅:筛子电子邮件过滤:正则表达式扩展POSIX ERE 规范其他筛子文档

使用普通组和字符类:

[:space:]*(Sun|Mon|Tue|Weds|Thu|Fri|Sat),[:space:]*[:digit:]+[:space:]+[:alpha:]+[:space:]+[:digit:]+[:space:]+(0[12345678]|1[89]|2[0123]):[:digit:][:digit:]:[:digit:][:digit:]

(我替换\w为,[:alpha:]但这可能不是你想要的。)

另外,记得要require ["regex"];

于 2019-07-26T17:40:26.533 回答
0

您不必通过正则表达式解析 Received 标头,date而是使用扩展名:

require "date";
require "relational";

if anyof (
    date :value "lt" "Received" "hour" "09",
    date :value "gt" "Received" "hour" "18"
) {
    # do something
}

或者

require "date";
require "relational";

if anyof (
    currentdate :value "lt" "hour" "09",
    currentdate :value "gt" "hour" "18"
) {
    # do something
}

rfc5260,它也提到了周末。

于 2022-03-03T10:21:23.390 回答