Regex 不包含方括号的字符串的正则表达式

Regex 不包含方括号的字符串的正则表达式,regex,procmail,Regex,Procmail,我正在尝试编辑我的.procmailrc文件以清除垃圾邮件 该账户来自我学校的CS部门,部门内的所有电子邮件都有括号内的主题,例如: [专业]一些科目 或: [本科生]另一门学科 我收到很多垃圾邮件没有被过滤器捕获,但几乎所有的垃圾邮件都不包含括号。我想将这些电子邮件移动到垃圾邮件文件夹中,但无法计算正则表达式。任何可以提供帮助的regex masters?您可以按照特定顺序设置.procmailrc,以帮助实现您的愿望procmail读取procmailrc,并使用匹配的第一个配方停止。因此,

我正在尝试编辑我的.procmailrc文件以清除垃圾邮件

该账户来自我学校的CS部门,部门内的所有电子邮件都有括号内的主题,例如:

[专业]一些科目

或:

[本科生]另一门学科


我收到很多垃圾邮件没有被过滤器捕获,但几乎所有的垃圾邮件都不包含括号。我想将这些电子邮件移动到垃圾邮件文件夹中,但无法计算正则表达式。任何可以提供帮助的regex masters?

您可以按照特定顺序设置
.procmailrc
,以帮助实现您的愿望
procmail
读取
procmailrc
,并使用匹配的第一个配方停止。因此,您可以在文件开头执行所有常规处理,并在结尾添加类似于以下内容的内容

此示例测试主题是否存在
[
,并保留这些消息。任何与任何其他配方不匹配且主题中不包含
[
的消息都将移动到
垃圾邮件中(本例使用
good
文件夹保存邮件,使用
spam
文件夹移动不匹配的邮件--调整名称以适应您的设置)


注意:通过在
可能的垃圾邮件
配方中没有条件行,procmail将把以前没有匹配配方的所有邮件移动到
可能的垃圾邮件
文件夹。实际上有几十个
正则表达式
您可以选择在
[
取决于您想要匹配的松紧程度。查看将完成您需要的并根据需要替换的正则表达式。

对于
主题:
标题,不包含开口方括号的简单Procmail方法非常简单

:0   # Add a second colon if the spam box is an mbox folder
* ^Subject:[^[]*$
spam
这只是检查开头的方括号,而忽略了您可能会收到只包含结尾方括号的合法邮件的可能性(我认为它本身就是垃圾邮件)


…但为了完整起见,我要提到的是,如果您想在其中添加一个右方括号,这是一种特殊情况,需要在字符类中进行特定排序(就像破折号需要先到或后到才能消除字符范围中的歧义)。这种类型的常见字符类是
[^][]
这是一个包含右方括号和右方括号的否定字符类。它们必须精确地按此顺序工作;在任何其他位置,右方括号将关闭字符类。(在其中也不能反斜杠转义;字符类中的反斜杠是文字。)

您可以将左括号与
[[]
匹配,或者将除左括号外的所有字符与
[^[]匹配
procmail
支持的
regex
的完整列表在
man 5 procmailrc
中。非常感谢!我认为您解释的括号内的问题正是我遇到的问题。这非常有效,并且确实适用于procmail。
:0   # Add a second colon if the spam box is an mbox folder
* ^Subject:[^[]*$
spam