2015-09-19 1 views
0

Est-il possible d'appliquer une regex dans procmail qui filtre pour des motifs de mots spécifiques. Par exemple, je pourrais le faire avec une expression régulière normale:procmail regex filtre les mails contenant une liste de motifs de mots spécifiques

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

Ceci produirait un match avec le texte suivant. Lorsque cela ne serait pas:

/(?=.*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 voluptua diam. À vero eos et accusam et juste duo dolores et ea rebum. Stet clita kasd gubergren, pas de mer takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor assis amet, consetetur sadipscing elitr, sed diam nonumy eirmod temporel invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. À vero eos et accusam et justement duo dolores et ea rebum. Stet clita kasd gubergren, pas de mer takimata sanctus est Lorem ipsum dolor sit amet.

Je voudrais que cela s'adapte à l'utilisation de procmail. Et même l'étendre au lieu de simplement chercher de "l'argent", il serait également correspondre sur "mOney", "möney", "móney" et ainsi de suite.

Est-ce possible? Si oui, comment?

Répondre

1

Oui, c'est possible. Laisse moi te montrer comment.

Votre expression régulière vérifie si les mots dolor, ispum et sit apparaissent dans un ordre aléatoire quelque part dans le texte. La recette procmail suivante fait la même chose:

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

La première condition contient une expression régulière vide qui, parce qu'elle correspond toujours, est utilisé pour donner votre score un décalage négatif. Une correspondance de chacune des règles suivantes augmentera ce score de un (quelle que soit la fréquence de chaque mot). A la fin, le score sera seulement positif (et donc déclenchera l'action) si le texte contient tous les 3 mots au moins une fois.

Pour ajouter d'autres mots clés, vous pouvez ajouter d'autres règles (et diminuer le décalage négatif en conséquence) ou étendre une règle existante, par ex. comme ceci

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

Vous pouvez ajouter des ancres de limite de mot, cependant; le regex '\ ' correspond seulement à ce mot, alors que jusr 'sit' correspond à * situation, * * position, * * dépôt, * etc – tripleee

+0

Je ne suis pas sûr si cela est dû à ma version de procmail mais j'ai dû changer légèrement à cela pour le faire fonctionner, mais alors ça marche, merci! 'verbose = yes # Corps = dolor, ipsum, asseyez-vous [passer à ordure] . 0 B * -2^0 * 1^0^* (dolor) * * 1^0^* (ipsum). * * 1^0^* (assis). * $ HOME/mail/Junk' – DarsVaeda

+0

Le '^ *' est tout à fait faux et les parenthèses et le '. *' sont totalement inutiles. – tripleee