筛过滤器脚本正则表达式

问题描述 投票:0回答:1

我有以下筛选脚本:

require ["enotify","body","regex","imap4flags","variables"];

if header :is "subject" "Sie haben eine Zahlung erhalten"
{
    if body :regex "Sie haben ([0-9,]+(\\.\\d{2})?) € EUR erhalten" {
        notify :importance "2" :message "Sie haben ${1} EUR erhalten" "mailto:[email protected]";
        setflag "\\Seen";
    }
}

但是

${1}
没有填充我的正则表达式

还尝试首先将

${1}
设置为定义的变量,也不起作用。 我做错了什么?

通知程序本身正在工作,我收到一封邮件,但没有值。

我想从正文中提取金额:

Sie haben 15,00 € EUR erhalten

所以我的正则表达式应该给我

15,00

regex scripting sieve-language
1个回答
0
投票

我不知道为什么,但是带有

body
:regex
扩展无法捕获正则表达式组,但您仍然可以使用
foreverypart
extracttext
将正文内容分配给变量,以便
string :regex
可以捕获它们.

Dovecot Pigeonhole Sieve 的正则表达式非常有限,你不能使用像

\d
这样的东西。

require ["enotify","regex","imap4flags","variables","foreverypart","extracttext"];

if header :is "subject" "Sie haben eine Zahlung erhalten"
{
    foreverypart {
        extracttext "body";
        if string :regex "${body}" "Sie haben ([0-9,]+(\\.[0-9]{2})?) € EUR erhalten" {
            notify :importance "2" :message "Sie haben ${1} EUR erhalten" "mailto:[email protected]";
            setflag "\\Seen";
            break;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.