Sieve: фильтровать тему с помощью регулярных выражений, файл в почтовый ящик с именем match

Я пытаюсь отфильтровать почту по теме с помощью регулярного выражения.

Предметы, которые я хочу соответствовать, читаются как [git-foo] some more text где foo это строка, которую я хочу проверить.

Я заканчиваю со следующим

require ["fileinto", "variables", "regex"];

if header :regex "subject" "^\[git-.*\]" {
    set :lower :upperfirst "repository" "${1}";

    if string :is "${repository}" "" {
        fileinto "Test/default";
    } else {
        fileinto "Test/${repository}";
    }
}

Замена первой if заявление с if header :matches "subject" "[git-*" { файлы почты в Test/Foo] some more text но, исправляя "[git-*" в "[git-*]", письма не совпадают.

Регулярное выражение работает с grep -e,

Что нужно сделать, чтобы правильно отправить почту Test/Foo?

4 ответа

Вам нужно объединить обе группы захвата и двойные зазоры. Оба были упомянуты в предыдущих ответах, но отдельно.

if header :regex "subject" "^\\[git-(.*)\\]" {
  set :lower :upperfirst "repository" "${1}";
  // ...
}

Объяснение:

  • в отличие от : совпадений:: регулярное выражение только устанавливает переменные совпадения ($1 и т. д.) для группы захвата. : match устанавливает их для каждого подстановочного знака.

  • : regex действительно требует выхода [ а также ], но с двойной обратной косой чертой.

Это регулярное выражение работает вместо этого?

'[Мерзавец -(.*)]

Может быть, уже немного поздно, но я обнаружил, что мне пришлось указывать папки с точками вместо слешей: например. 'fileinto "Test.default"'.

Вам нужно убежать дважды, чтобы \[git-.*\] становится \\[git-.*\\]

Другие вопросы по тегам