I am trying to filter mails by subject with a regular expression.

The subjects I want to match are read like [git-foo] some more text where foo is the string I want to check for.

I end up with the following

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}";

Replacing first if statement with if header :matches "subject" "[git-*" { files mails into Test/Foo] some more text but, when correcting "[git-*" to "[git-*]", mails do not match.

Regular expression works with grep -e.

What to do to file mail correctly into Test/Foo?


Does this regex works instead?


  • Using Thunderbird to set sieve scripts, saving fails: "error: invalid regular expression '[git-(.*)]' for regex match: invalid range end." I also used double quotation marks, otherwise I get way more errors. – Jan Feb 14 '14 at 21:28

You need to combine both capture groups and double backlashes. Both were mentioned in previous answers, but separately.

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


  • unlike :matches, :regex only sets match variables ($1, etc.) for the capture group. :matches sets them for each wildcard.

  • :regex does indeed require escaping [ and ], but with a double backslash.


You need to escape twice, so that \[git-.*\] becomes \\[git-.*\\]


Might be a bit late now, but I found that I had to specify folders with dots instead of slashes: eg. 'fileinto "Test.default"'.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.