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-.*\\]