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

时间:2015-04-08 22:24:12

标签: regex procmail

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

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

  

[专业]一些主题

或:

  

[本科生]另一个主题

我收到很多未被过滤器捕获的垃圾邮件,但几乎所有垃圾邮件都没有包括括号。我想将这些电子邮件移动到垃圾邮件的文件夹中,但无法弄清楚REGEX。任何正则表达式掌握那些可以帮助吗?

2 个答案:

答案 0 :(得分:2)

Subject:标题的简单Procmail配方不包含空方括号只是

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

这只是检查一个开放的方括号,并忽略了你可以接收只包含一个结束方括号的合法邮件的可能性(我认为它本身就是垃圾邮件)。

...但是为了完整性,我会提到如果你想要一个结束的方括号,这是一个特殊的情况,需要在角色类中进行特定的排序(就像破折号需要首先或最后一个从字符范围中消除歧义)。这种类型的常见字符类是[^][],它是一个包含右方括号和一个开放方括号的否定字符类。他们需要按照这个顺序正常工作;在任何其他位置,结束方括号将关闭字符类。 (你不能反斜杠 - 在那里逃避它;字符类中的反斜杠是文字。)

答案 1 :(得分:0)

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

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

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

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

注意:由于spam-probably配方中没有条件行,procmail会将之前未与配方匹配的所有邮件移至spam-probably文件夹。根据您想要匹配的紧张或松散程度,您可以选择在regexs完成主题匹配的几十[个{{1}}。查看将完成所需内容并根据需要替换的正则表达式。