Regex 如何匹配第一对方括号内的所有内容

Regex 如何匹配第一对方括号内的所有内容,regex,sieve-language,Regex,Sieve Language,我正在尝试创建一个新的。我正在使用的sieve的实现是 我订阅了github项目更新,并收到github发送的主题为以下格式的电子邮件: Re:[Opserver]从异常详细信息页面(#77)在Jira上创建问题 主题行中的方括号中包含一个项目名称。以下是我的筛选脚本的相关部分: if address "From" "notifications@github.com" { if header :regex "subject" "\\[(.*)\\]" { set :lower :

我正在尝试创建一个新的。我正在使用的sieve的实现是

我订阅了github项目更新,并收到github发送的主题为以下格式的电子邮件:

Re:[Opserver]从异常详细信息页面(#77)在Jira上创建问题

主题行中的方括号中包含一个项目名称。以下是我的筛选脚本的相关部分:

if address "From" "notifications@github.com" {
  if header :regex "subject" "\\[(.*)\\]" {
      set :lower :upperfirst "repository" "${1}";
      fileinto :create "Subscribtions.GitHub.${repository}"; stop;
  } else {
      fileinto :create "Subscribtions.GitHub"; stop;
  }
}
从上面可以看到,我正在将消息移动到相应的project IMAP文件夹中。因此,带有上述主题的消息将在Subscribtions.Github.Opserver中结束

不幸的是,这个脚本有一个小问题。如果有人在github问题的标题中添加方括号,则过滤器将中断。例如,如果主题是:

[项目][请看一下]-非常奇怪的问题

上面的筛选器将邮件移动到文件夹
Subscribtions.Github.Project][请查看它
,这是完全不需要的。无论如何,我希望它移动到
Subscribtions.Github.Project

这是因为默认情况下正则表达式是贪婪的。因此它们匹配最长的匹配。但是,当我尝试用通常的方法将
“\\[(.*)\\]”
更改为
“\\[(.*)\]”
时,似乎没有任何变化


如何编写此正则表达式以使其按需要运行?

答案是将
“\\[(.*\\]”
更改为
“\\[([^]*)\\]”

通过阅读问题中的链接,我们发现了所使用的。不幸的是,这些

然而,如上所述,在这种特殊情况下有一个解决办法