Regex 如何匹配第一对方括号内的所有内容
我正在尝试创建一个新的。我正在使用的sieve的实现是 我订阅了github项目更新,并收到github发送的主题为以下格式的电子邮件: Re:[Opserver]从异常详细信息页面(#77)在Jira上创建问题 主题行中的方括号中包含一个项目名称。以下是我的筛选脚本的相关部分: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 :
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
这是因为默认情况下正则表达式是贪婪的。因此它们匹配最长的匹配。但是,当我尝试用通常的方法将“\\[(.*)\\]”
更改为“\\[(.*)\]”
时,似乎没有任何变化
如何编写此正则表达式以使其按需要运行?答案是将
“\\[(.*\\]”
更改为“\\[([^]*)\\]”
通过阅读问题中的链接,我们发现了所使用的。不幸的是,这些
然而,如上所述,在这种特殊情况下有一个解决办法