Reguläre Ausdrücke mit dem Spam-Wort-Filter

Dieses Tutorial wurde freundlicherweise von Chactory zur Verfügung gestellt. Die Original-Version findet man auf seiner Homepage.

Der Spam-Wort-Filter von Spamihilator unterstützt reguläre Ausdrücke (englisch: Regular Expressions oder RegExes). Wie man diese einsetzen kann, um Spam-Wörter in Spam-Mails zu identifizieren, wird in dem folgenden kurzen Tutorial erklärt. Ausführlichere Anleitungen finden sich z.B. auf den Websites Regenechsen oder Regular Expressions.

Exkurs: Spam-Wort-Filter

Die meisten Spam-Wort-Filter enthalten eine Liste von Spamwörtern, die typischerweise in Spam-Mails vorkommen. Erkennt ein Spam-Wort-Filter im Betreff oder im Text einer E-Mail eines der Spamwörter, wird die E-Mail als Spam ausgesiebt. Der Spam-Wort-Filter des Spamihilators kann aber noch viel mehr!

Die Spam-Wörter werden sinnvoll mit einer Spam-Wahrscheinlichkeit zwischen 0-100% gewichtet, damit nicht ein einzelnes Signalwort den Ausschlag gibt, wenn es einmal in einer regulären E-Mail vorkommt. Zum Beispiel kann das Wort Überraschung (30%) schon mal in einer regulären E-Mail vorkommen. Erst zusammen mit weiteren Spam-Wörtern wird die Spamschwelle überschritten. Harte Spam-Wörter erhalten Werte um 90-100%.

Der Spam-Wort-Filter des Spamihilators arbeitet als Substring-Filter, d.h. er ist in der Lage, mit einem Spamwort auch längere Zeichenketten zu filtern, die das Spamwort enthalten. Dieser Vorteil ist aber mit Vorsicht einzusetzen, wie folgende Beispiele zeigen. So ist das im Spamwortfilter als Spamwort verwendete werbung auch in der Zeichenkette Bewerbung enthalten, die somit ebenfalls gefiltert wird. Beispielsweise kann die Zeichenfolge sex die Wörter sex, sexy, sexual und weitere filtern. Aber diese Zeichenfolge kommt auch in Verkehrsexperte, Essex oder Sextett u.a. vor. Das Spam-Wort anal kommt auch in Kanal, banal oder in Analyse und Analgesie vor. Ich habe deshalb die voreingestellten Wörter anal, sex und werbung durch Setzen der Wahrscheinlichkeit auf Null deaktiviert und sie als reguläre Ausdrücke neudefiniert (siehe bei den Beispielen unten).

Der Spam-Wort-Filter des Spamihilators unterstützt reguläre Ausdrücke (Regular Expressions). Das ist besonders dazu nützlich, um auch diejenigen Spamwörter zu erfassen, die durch absichtliche Falschschreibung vor einer Entdeckung durch einfache Spamwortfilter getarnt werden. Man trägt die RegExes in die Spamwortliste ein und aktiviert das Kästchen „Regular Expression“.

Der Spam-Wort-Filter gehört in der Filterreihenfolge (direkt) vor den Lernenden Filter.

Definition

Regular Expressions sind Ausdrücke, mit deren Hilfe man Zeichenfolgen in Texten suchen kann. Die RegExe werden aus Schriftzeichen, Zeichenklassen/Gruppen, Platzhaltern und Modifikatoren/Metazeichen gebildet.

Regeln

Ein Zeichen durch ein Zeichen finden: Das Zeichen a sucht und findet das erste vorhandene a, z.B. in Hausaufgaben.

Zeichen mit Zeichenklassen/Gruppen finden: [Vv] findet das erste vorhandene V oder v. Der Ausdruck gr[äe]ulich findet das erste vorhandene gräulich oder greulich.

Platzhalter verwenden: \s findet Leerzeichen/Tabs, \b passt zu Wortgrenzen. Der Punkt (.) passt bei allen Zeichen außer Zeilenumbruch.

Wiederholung mit Modifikatoren: Ein nachgestelltes ? bedeutet, dass das Zeichen 0-1 mal vorkommen soll, ein + bedeutet 1 - beliebig viele Male, ein * 0 - beliebig viele Male. Haus(aufgaben)? findet das erste vorhandene Haus oder Hausaufgaben.

Greediness (Gier) des Sterns: Der Modifikator * kann sehr gierig sein. Eine RegEx mit einem Stern wählt nicht nur die erste passende Zeichenkette, sondern die längste erste passende. Dadurch kann es zu falsch-positiven Erkennungen kommen. Das Fragezeichen hinter dem Stern *? vermindert die Gier des Sterns.

Metazeichen: Metazeichen sind \, [, ^, $, ., |, ?, *, +, ( und ). \ (Backslash) hebt die Metazeichen auf, z.B. 1\+1 findet 1+1.

Übersicht (ohne Anspruch auf Vollständigkeit)

a sucht und findet a
. findet alle Zeichen außer Zeilenumbruch (Newline)
\d Ziffern
\D Nicht-Ziffern
\w alphanumerische Zeichen und Unterstrich
\W Nicht-\w-Zeichen
\s Whitespaces (Tab, Leerzeichen usw.)
\S Nicht-Whitespaces
\b Wortgrenzen
\B Nicht-Wortgrenzen
\A Anfang des Strings
\z tatsächliches physikalische Ende des Strings
\Z Ende des Strings, bzw. das Zeichen unmittelbar vor dem Newline am Ende
^ Zeilenanfang, Negativierung
$ Zeilenende
| und-oder
? Buchstabe/Ausdruck vor dem Fragezeichen optional, muß 0-1 mal vorkommen
+ 1 - beliebig viele Male
* 0 - beliebig viele Male
*? das Fragezeichen vermindert die Gier des Sterns
\ hebt die Bedeutung von Metazeichen auf, das sind ?, [, {, (, ), +, *, ., ^, $, | und \
[] Zeichenklasse, enthält mehrere gesuchte Zeichen oder einen Ausdruck, entweder-oder
() Zeichengruppe
{x,y} x- bis y-mal; “,y“ optional, {x} x-mal, {x,} x-mal bis beliebig oft
(?i) vor einem Ausdruck findet groß- oder kleingeschriebene Zeichenketten

Beispiele

Das Beispiel „viagra“:

Gesucht werden viagra, viaaggggra, via gra, via.gra, \/|AGRA, \/I/\GR/\, v1aqra, vi@gr@, und weitere Varianten.

Der Reguläre Ausdruck [Vv].?[Ii].?[Aa].?[Gg].?[Rr].?[Aa] aus der Standard-Spamwortliste des Spamihilators findet viagra, viaggra, via gra und via.gra.

Der Ausdruck v[\W_]{0,2}[i1][\W_]{0,2}[a@][\W_]{0,2}g[\W_]{0,2}r[\W_]{0,2}[a@] von der Website eines anderen Anti-Spam-Programms passt zu den Varianten viagra, via gra und via.gra, aber nicht zu viaggra.

Die RegEx (?i)[v\\]+/?.?[i:1!\|]+.?[a@/]+\\?.?[gq]+.?r+.?[a@/]+\\? findet alle oben aufgezählten Varianten.

Je umfassendere Zeichenkombinationen eine RegEx erkennt, desto größer ist allerdings die Gefahr einer falsch-positiven Mustererkennung, was u.U. dazu führen könnte, dass eine gute E-Mail als Spam klassifiziert wird.

Weitere Beispiele:

ambien (?i)[a@/]+\\?.?m+.?[b8]+.?[i:1!\|]+.?[e3€]+.?n+\b (Wortende, sonst Verwechslung!)
anal (?i)\banal\b
bulgary (?i)\b[b8].?[uv].?[li17\|].?[gq].?[a@/][\\]?r.?[yi1!:\|]?
cheapest pills (?i)cheapest\spills
cialis (?i)\bc.?[i1!:\|].?[a@/][\\]?.?[li17\|].?[i1!:\|].?[s235$]
credit (?i)\bc.?r.?[e3€].?d.?[i1!:\|].?[t\+]
discount (?i)\bd.?[i1!:\|].?[s235$].?c.?[oQ0].?[uv].?n.?[t\+]?
ejaculation (?i)ejaculation
enlargement (?i)enlargement
Jemand, der dich sehr gut kennt (?i)jemand.*?der\sdich\ssehr\sgut\skennt
levitra \b[LlIi17\|].?[Ee3].?[Vv\\][/]?.?[Ii1!:\|].?[Tt\+].?[Rr].?[Aa@/]?[\\]? (v nicht optional!)
money (?i)\bm.?[oQ0].?n.?[e3€].?y
mortgage \b[Mm].?[OoQ0].?[Rr].?[Tt\+].?[Ggq].?[Aa@/][\\]?.?[Ggq].?[Ee3€]?
natural weight loss (?i)(natural\s)?weight(\s)?loss
omega \b[OoQ0].?[Mm].?[Ee3€].?[Ggq].?[Aa@/][\\]?
online pharmacy (?i)online\spharmacy
penis (?i)\bp+.?[e3€]+.?n+.?[i1!:\|]+.?[s5$]+\b
pharmaceuticals (?i)pharmaceuticals
porno (?i)\bp.?[oQ0].?r.?n.?[oQ0]?
premature (?i)premature
prescription (?i)prescription
refinance \b[Rr].?[Ee3€].?[Ff].?[Ii1!:\|].?[Nn].?[Aa@/][\\]?.?[Nn].?[CcZz].?[Ee3€]?
rolex \b[Rr].?[OoQ0].?[LlIi17\|].?[Ee3€].?[Xx]
sex \b[Ss25$].?[Ee3€].?[Xx].?[Yy]?\b
soma [Ss25$].?[OoQ0].?[Mm].?[Aa]?\b oder \b[Ss25$].?[OoQ0].?[Mm].?[Aa/][\\]?\b
src=3D"cid: src=3D"cid:
src="cid: src="cid:
valium (?i)[v\\]+/?.?[a@/]+\\?.?[li17\|]+.?[il1!:\|]+.?[uv]+.?m+\b
werbung \bwerbung
xanax \b[Xx].?[Aa@/][\\]?.?[Nn].?[Aa@/][\\]?.?[Xx]?
X-Spam-Level: ******** X-Spam-Level:\s\*{8,30}
**** SPAM **** (?i)\*{1,6}spam\*{1,6}

Hilfsmittel

Wer selbst Reguläre Ausdrücke erstellen möchte, findet in dem Computerprogramm The Regex Coach von Edi Weitz einen zuverlässigen Helfer. Das Programm ermöglicht das Testen regulärer Ausdrücke, bei Bedarf auch in Einzelschritten. Das Programm ist Freeware.

07.08.07, Chactory

 
de/tutorials/regex.txt · Zuletzt geändert: 2009/08/18 15:14 von chactory