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

Regular expression for strings not containing brackets

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

这个账号是我学校CS系的,系里所有的邮件都有带括号的主题,比如:

[Majors] Some Subject

或:

[Undergrads] Another Subject

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

您可以按特定顺序设置 .procmailrc 以帮助完成您想要的。 procmail 读取 procmailrc 并在第一个匹配的食谱处停止。因此,你可以在文件的开头做你所有的常规处理,最后在末尾添加类似下面的内容。

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

:0:                        # keep mail with [ in 'good' folder
* ^Subject:.*\[
good

:0:                        # move unmatched to 'spam-probably' folder
spam-probably

注意: 由于在 spam-probably 配方中没有条件行,procmail 会将所有以前没有匹配配方的邮件移动到 spam-probably 文件夹。您可以从字面上选择数十种 regexs 来完成 [ 上的主题匹配,具体取决于您想要匹配的紧密程度或松散程度。查看将完成您需要的正则表达式并根据需要进行替换。

Subject: headers 的简单 Procmail 配方不包含左方括号

:0   # Add a second colon if the spam box is an mbox folder
* ^Subject:[^[]*$
spam

这只是检查左方括号,而忽略了您可能会收到仅包含右方括号的合法邮件的可能性(我认为它本身就是垃圾邮件)。

...但是为了完整起见,我会提到如果你想要一个右方括号,那是一种特殊情况,需要在字符 class 中进行特定排序(就像破折号需要去第一个或最后一个字符范围来消除歧义)。这种类型的常见字符 class 是 [^][],它是一个包含右方括号和左方括号的否定字符 class。他们需要完全按照这个顺序才能工作;在任何其他位置,右方括号将关闭字符 class。 (你也不能 backslash-escape 它在那里;字符中的反斜杠 classes 是文字。)