procmail 正则表达式过滤包含列表特定单词模式的邮件

procmail regex filter mails containing a list specific word patterns

是否可以在 procmail 中应用正则表达式来过滤特定的单词模式。 例如,我可以用普通的正则表达式来做到这一点:

/(?=.*dolor)(?=.*ipsum)(?=.*sit)/s

这将产生与以下文本的匹配。这不会:

/(?=.*money)(?=.*ipsum)(?=.*sit)/s

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

我希望它能适应 procmail 的使用。甚至扩展它,而不只是搜索 "money",它还会匹配 "mOney"、"möney"、"móney" 等等。

可能吗? 如果是,怎么做?

是的,这是可能的。让我告诉你怎么做。

您的正则表达式检查单词 dolorispumsit 是否以随机顺序出现在文本中的某处。下面的 procmail 配方做同样的事情:

          :0 B
          * -2^0
          * 1^0  \<dorum\>
          * 1^0  \<ipsum\>
          * 1^0  \<sit\>
          action_dorum_ipsum_sit

第一个条件包含一个空的正则表达式,因为它总是匹配,所以用于给你的分数一个负偏移。下一个规则的每一个匹配将使该分数增加一个(无论每个单词出现的频率如何)。最后,只有当文本至少包含一次所有 3 个词时,分数才会为正(并因此触发动作)。

要添加更多关键字,您可以添加更多规则(并相应地减少负偏移量)或扩展现有规则,例如像这样

          * 1^0   \<(mOney|möney|móney)\>