2015-02-23 130 views
2

我正在嘗試在sieve中創建regular expression。我使用的分子篩的實現是Dovecot Pigeonhole如何匹配第一對方括號內的所有內容

我訂閱的github項目更新,我收到從GitHub電子郵件與看起來像這樣格式的主題:

回覆:[Opserver ]從異常詳細信息頁面(#77)創建Jira上的問題

在主題行中包含方括號中的項目名稱。這裏是我的篩腳本的相關部分:

if address "From" "[email protected]" { 
    if header :regex "subject" "\\[(.*)\\]" { 
     set :lower :upperfirst "repository" "${1}"; 
     fileinto :create "Subscribtions.GitHub.${repository}"; stop; 
    } else { 
     fileinto :create "Subscribtions.GitHub"; stop; 
    } 
} 

正如你可以從上面看到的,我感動的消息合適的項目IMAP文件夾。因此,上述主題的消息最終將在Subscribtions.Github.Opserver

不幸的是,這個腳本存在一個小問題。如果有人在他們的github問題的標題中添加方括號,則過濾器會中斷。例如,如果主題是:

[項目] [請看看吧] - 很奇怪的問題

上述過濾器將郵件移動到文件夾Subscribtions.Github.Project] [please look at it這是完全不可取的。無論如何,我希望它被移動到Subscribtions.Github.Project

發生這種情況是因爲默認情況下正則表達式是貪婪的。所以他們匹配最長的匹配。但是,當我試圖修復它通常的方式改變"\\[(.*)\\]""\\[(.*?)\\]"似乎沒有任何改變。

我該如何編寫這個正則表達式,以便它按照需要行事?

回答

相關問題