【问题标题】:Regular expression for strings not containing brackets不包含括号的字符串的正则表达式
【发布时间】:2015-04-08 22:24:11
【问题描述】:

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

这个账号来自我学校的CS部门,部门内的所有邮件都有带括号的主题,例如:

[专业] 一些学科

或:

[本科生]其他学科

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

【问题讨论】:

  • 您可以将左括号与[[] 匹配,或将除左括号之外的所有字符与[^[] 匹配。 procmail 支持的regex 的完整列表在man 5 procmailrc 中。

标签: regex procmail


【解决方案1】:

不包含左方括号的Subject: 标头的简单 Procmail 配方很简单

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

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

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

【讨论】:

  • 非常感谢!我认为您解释的右括号问题正是我遇到的问题。这很好用,并且确实适用于 procmail。
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2011-04-11
    相关资源
    最近更新 更多