4

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?

Jan
  • 266
  • 1
  • 3
  • 6

4 Answers4

2

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

Explanation:

  • 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.

Dato
  • 21
  • 2
1

Does this regex works instead?

'[git-(.*)]'

alxgomz
  • 1,600
  • 1
  • 10
  • 14
  • 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
0

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

Andrew Savinykh
  • 516
  • 2
  • 7
  • 19
0

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