Esse regex funciona em vez disso?
'[git - (. *)]'
Estou tentando filtrar e-mails por assunto com uma expressão regular.
Os assuntos que desejo corresponder são lidos como [git-foo] some more text
, em que foo
é a sequência que desejo verificar.
Eu acabo com o seguinte
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}";
}
}
Substitui a primeira instrução if
por if header :matches "subject" "[git-*" {
emails em Test/Foo] some more text
, mas, ao corrigir "[git-*"
a "[git-*]"
, os e-mails não correspondem.
A expressão regular funciona com grep -e
.
O que fazer para arquivar e-mails corretamente em Test/Foo
?
Esse regex funciona em vez disso?
'[git - (. *)]'
Você precisa combinar os dois grupos de captura e as folgas duplas. Ambos foram mencionados em respostas anteriores, mas separadamente.
if header :regex "subject" "^\[git-(.*)\]" {
set :lower :upperfirst "repository" "${1}";
// ...
}
Explicação:
ao contrário de : corresponde , : regex define apenas variáveis de correspondência ($ 1, etc.) para o grupo de captura. : corresponde define-os para cada caractere curinga.
: regex exige, de fato, o escape de [
e ]
, mas com uma barra invertida dupla.
Você precisa escapar duas vezes, para que \[git-.*\]
se torne \[git-.*\]
Pode ser um pouco tarde agora, mas descobri que precisava especificar pastas com pontos em vez de barras: por exemplo. 'fileinto' Test.default "'.
Tags grep regex dovecot email-server sieve