Nutzung Regulärer Ausdrücke in den Filterregeln

Der Inhaltsfilter unterstützt die Suche anhand "Regulärer Ausdrücke" diese sind vielseitig einsetzbar, und mit ihrer Hilfe kann nicht nur nach herkömmlichen Zeichenketten sondern auch nach Text-Mustern gesucht werden. Reguläre Ausdrücke enthalten eine Kombination aus Klartext und besonderen Steuerzeichen, welche die Art der Rastersuche festlegen; sie können daher das Regelsystem des Inhaltsfilters mächtiger und treffsicherer machen.

Was versteht man unter Regulären Ausdrücken?

Reguläre Ausdrücke werden nach dem englischen Fachbegriff "Regular Expression" auch als "RegExp" abgekürzt. Ein Regulärer Ausdruck ist ein Textmuster, das aus einer Kombination von Zeichen mit besonderer Bedeutung, den sog. Metazeichen, und regulären alphanumerischen Zeichen, den sog. gewöhnlichen oder terminalen Zeichen (wie etwa abc, 123 und andere). Anhand des Musters wird versucht, einen Treffer in der entsprechenden Zeichenkette zu finden, wobei diese Suche erfolgreich oder erfolglos sein kann. Reguläre Ausdrücke werden hauptsächlich zur Treffersuche in normalem Text und zum Suchen und Ersetzen verwendet.

Metazeichen sind besondere Zeichen, die innerhalb Regulärer Ausdrücke bestimmte Funktionen erfüllen. Das System der Regulären Ausdrücke, das im Inhaltsfilter von MDaemon implementiert ist, gestattet die Verwendung folgender Metazeichen:

\ | () [] ^ $ * + ? . <>

Metazeichen

Beschreibung

\

Wird der Backslash ("\" oder "umgekehrter Schrägstrich") vor ein Metazeichen gesetzt, so wird das folgende Metazeichen maskiert, also als gewöhnliches Zeichen behandelt. Dies ist nötig, wenn der Reguläre Ausdruck nach einem der besonderen Zeichen suchen soll, die sonst als Metazeichen verwendet werden. Beispielsweise muss ein Ausdruck, der nach dem Pluszeichen ("+") suchen soll, dafür die Zeichenkette "\+" enthalten.

|

Das Alternativzeichen (auch "Oder-Zeichen" oder "senkrechter Strich" genannt) wird verwendet, wenn entweder die Zeichenkette vor oder nach dem Oderzeichen mit dem zu durchsuchenden Text übereinstimmen soll. Der Reguläre Ausdruck "abc?xyz" sucht beispielsweise nach dem Vorkommen der Zeichenketten "abc" oder "xyz".

[...]

Eine von eckigen Klammern ("[" und "]") umschlossene Zeichenkette bedeutet, dass jedes beliebige Zeichen in der Kette mit dem zu durchsuchenden Text übereinstimmen soll. Ein Bindestrich ("-") zwischen den Zeichen in Klammern definiert eine Zeichenreihe. Wird beispielsweise die Zeichenkette "abc" mit dem Regulären Ausdruck "[a-z]" durchsucht, dann ergeben sich drei Treffer: "a", "b" und "c". Lautet statt dessen der Suchausdruck "[az]", so ergibt sich nur ein Treffer: "a".

^

Das sog. "Caret" bezeichnet einen Zeilenanfang. In der Zeichenkette "abc ab a" ergibt der Suchausdruck "^a" einen Treffer, und zwar das erste Zeichen der durchsuchten Zeichenkette. Der Ausdruck "^ab" ergibt ebenfalls einen Treffer, und zwar die ersten beiden Zeichen in der durchsuchten Zeichenkette.

[^...]

Folgt das Caret ("^") direkt auf eine öffnende eckige Klammer ("["), so erfüllt es einen anderen Zweck. Es legt fest, dass die in der Klammer folgenden Zeichen keinen Treffer in der zu durchsuchenden Zeichenkette ergeben dürfen. Der Ausdruck "[^0-9]" bedeutet beispielsweise, dass das zu suchende Zeichen keine Ziffer sein darf.

(...)

Die runden Klammern beeinflussen die Reihenfolge, in der die Muster ausgewertet werden, und dient außerdem als Suchmuster, das in Ausdrücken zum Suchen und Ersetzen verwendet werden kann.

Die Ergebnisse einer Suche durch einen Regulären Ausdruck werden zwischengespeichert und können in der Anweisung zum Ersetzen verwendet werden, um einen neuen Ausdruck zu bilden. Im Ausdruck zum Ersetzen kann das Zeichen "$0" enthalten sein; es wird durch die Zeichenketten ersetzt, die während der Suche durch den Regulären Ausdruck gefunden wurden. Findet der Suchausdruck "a(bcd)e" beispielsweise eine Zeichenkette, so ersetzt der Ausdruck "123-$0-123" den gefundenen Text durch "123-abcde-123".

In ähnlicher Weise können die besonderen Zeichen "$1", "$2", "$3" usw. in dem Ausdruck verwendet werden, der Zeichenketten ersetzen soll. Diese Zeichen werden nur durch die unmittelbaren Ergebnisse des Suchmusters, nicht aber durch die vollständige gefundene Zeichenkette ersetzt. Die Zahl nach dem Backslash legt bei Regulären Ausdrücken mit mehr als einem Suchmuster fest, auf welches Suchmuster verwiesen werden soll. Lautet der Suchausdruck beispielsweise "(123)(456)", und lautet der Ausdruck zum Ersetzen "a-$2-b-$1", so wird eine gefundene Zeichenkette durch "a-456-b-123" ersetzt, wohingegen ein Ausdruck zum Ersetzen "a-$0-b" durch "a-123456-b" ersetzt wird.

$

Das Dollarzeichen ("$") bezeichnet ein Zeilenende. In der Zeichenkette "13 321 123" ergibt der Ausdruck "3$" einen Treffer, und zwar das letzte Zeichen der Kette. Der Ausdruck "123$" ergibt ebenfalls einen Treffer, und zwar die letzten drei Zeichen in der Zeichenkette.

*

Das Zeichen Stern ("*") bestimmt, dass das ihm vorausgehende Zeichen mehrmals hintereinander vorkommen darf, aber nicht vorkommen muss. Daher ergibt "1*abc" für die Zeichenketten "111abc" und "abc" jeweils einen Treffer.

+

Etwas anders als der Stern, bestimmt das Pluszeichen "+", dass das ihm vorausgehende Zeichen mindestens einmal in der Zeichenkette vorkommen muss, aber auch mehrfach vorkommen darf. Daher ergibt "1+abc" einen Treffer bei der Zeichenkette "111abc", nicht aber bei "abc".

?

Das Fragezeichen ("?") bestimmt, dass das ihm vorausgehende Zeichen mehrmals vorkommen darf, aber nicht vorkommen muss. Daher ergibt "1?abc" einen Treffer für den Text "abc" sowie einen Treffer für die Zeichenkette "1abc" aus dem Text "111abc".

.

Das Metazeichen Punkt (".") ergibt einen Treffer für jedes beliebige andere Zeichen. Daher ergibt ".+abc" einen Treffer für "123456abc", "a.c" ergibt einen Treffer für "aac", "abc", "acc" u.s.w.

Geeignete Bedingungen und Aktionen

Reguläre Ausdrücke dürfen in die Bedingung jeder Filterregel eingesetzt werden, die sich auf Kopfzeilen bezieht, also beispielsweise in jeder Regel, mit der Bedingung "if the FROM HEADER contains" ("Wenn die Kopfzeile Absender ... enthält"). Reguläre Ausdrücke sind auch in der Bedingung "if the MESSAGE BODY contains" ("Wenn der Nachrichtentext ... enthält") zulässig.

Reguläre Ausdrücke sind auch in zwei Aktionen der Regeln des Inhaltsfilters zulässig: "Search and Replace Words in a Header" ("Wörter in einer Kopfzeile suchen und ersetzen") und "Search and Replace Words in the Message Body" ("Wörter im Nachrichtentext suchen und ersetzen").

Reguläre Ausdrücke in den Bedingungen der Regeln des Inhaltsfilters arbeiten unabhängig von Groß- und Kleinschreibung und ignorieren die Schreibweise insoweit.

Die Frage, ob Reguläre Ausdrücke in Aktionen der Regeln des Inhaltsfilters die Groß-/Kleinschreibung beachten sollen, ist dem Benutzer überlassen. Beim Anlegen eines Regulären Ausdrucks fragt MDaemon ab, ob die Groß- und Kleinschreibung beachtet werden soll oder nicht.

Definition eines Regulären Ausdrucks in der Bedingung einer Regel

Um für eine Regel, die sich auf eine Kopfzeile oder den Nachrichtentext bezieht, einen Regulären Ausdruck zu definieren, ist wie folgt vorzugehen:

1.Im Dialogfenster "Regel erstellen" den Listeneintrag wählen, der die gewünschte Bedingung zu Kopfzeile oder Nachrichtentext kennzeichnet, die in die Regel eingefügt werden soll.

2.In der Regel-Beschreibung am Ende des Dialogfensters "Regel erstellen" den Link "contains specific strings" ("enthält bestimmte Zeichenketten") der Bedingung anklicken, die in Schritt 1 ausgewählt wurde. Es öffnet sich das Fenster zur Eingabe des zu suchenden Textes.

3.Den Link "contains" ("enthält") im Abschnitt "Derzeit angegebene Zeichenketten..." anklicken.

4.Aus dem Rollmenü den Eintrag "Matches Regular Expression" ("ergibt einen Treffer aus Regulärem Ausdruck") wählen und OK anklicken.

5.Falls Hilfe bei der Definition des Regulären Ausdrucks gewünscht ist oder der Ausdruck überprüft werden soll, das Steuerelement "Regulären Ausdruck testen" anklicken. Falls diese Funktion nicht benötigt wird, den Regulären Ausdruck in das Textfeld eintragen, Hinzufügen anklicken und mit Schritt 8 fortfahren.

6.Den Regulären Ausdruck in das Feld "Suchausdruck" eintragen. Um diesen Vorgang zu vereinfachen, ist ein Kontextmenü vorgesehen, mit dessen Hilfe die gewünschten Metazeichen einfach in den Regulären Ausdruck eingesetzt werden können. Ein Klick auf den Knopf ">" öffnet das Menü. Nach Auswahl eines Menüpunkts wird das zugehörige Metazeichen in den Ausdruck eingefügt, und der Ankerpunkt für die Texteingabe wird an die Stelle im Ausdruck verschoben, die für das Zeichen erforderlich ist.

7.Gewünschten Text, anhand dessen der Ausdruck überprüft werden soll, in das entsprechende Textfeld eingeben und Testen anklicken. Wenn keine weiteren Tests gewünscht sind, OK anklicken.

8.OK anklicken.

9.Mit der Erstellung der Regel wie gewohnt fortfahren.

Definition eines Regulären Ausdrucks in der Aktion einer Regel

Um eine Aktion "Search and Replace Words in…" ("Wörter in … suchen und ersetzen") für den Einsatz eines Regulären Ausdrucks zu konfigurieren, ist wie folgt vorzugehen:

1.Im Dialogfenster "Regel erstellen" den Listeneintrag wählen, der die gewünschte Aktion zum Suchen und Ersetzen von Wörtern kennzeichnet, die in die Regel eingefügt werden soll.

2.In der Regel-Beschreibung am Ende des Dialogfensters "Regel erstellen" den Link "specify information" ("Informationen angeben") der Aktion anklicken, die in Schritt 1 ausgewählt wurde. Es öffnet sich das Fenster zur Eingabe der Parameter zum Suchen und Ersetzen.

3.Wurde in Schritt 1 die Aktion "Search…header" ("Kopfzeile … durchsuchen) ausgewählt, muss die zu durchsuchende Kopfzeile aus dem Rollmenü ausgewählt oder, falls die gewünschte Kopfzeile hier nicht aufgeführt ist, in das Textfeld eingegeben werden. Wurde in Schritt 1 die Aktion "Search…header" ("Kopfzeile … ersetzen"), so wird dieser Schritt übersprungen.

4.Den für diese Aktion gewünschten Suchausdruck eintragen. Um diesen Vorgang zu vereinfachen, ist ein Kontextmenü vorgesehen, mit dessen Hilfe die gewünschten Metazeichen einfach in den Regulären Ausdruck eingesetzt werden können. Ein Klick auf den Knopf ">" öffnet das Menü. Nach Auswahl eines Menüpunkts wird das zugehörige Metazeichen in den Ausdruck eingefügt, und der Ankerpunkt für die Texteingabe wird an die Stelle im Ausdruck verschoben, die für das Zeichen erforderlich ist.

5.Den für diese Aktion gewünschten Ausdruck zum Ersetzen eintragen. Wie beim Suchausdruck, steht auch hier ein Kontextmenü zum Einfügen der Metazeichen zur Verfügung. Soll die gefundene Zeichenkette nicht durch anderen Text ersetzt sondern gelöscht werden, das entsprechende Textfeld leer lassen.

6."Groß-/Kleinschreibung prüfen" anklicken, falls der Ausdruck nach Groß- und Kleinschreibung unterscheiden soll.

7."Regulärer Ausdruck" anklicken, falls die zum Suchen und Ersetzen eingetragenen Zeichenketten als Reguläre Ausdrücke behandelt werden sollen; ansonsten werden diese als normale Zeichenketten behandelt, und der Inhaltsfilter sucht nach einer genauen Übereinstimmung des eingetragenen Textes, ohne die Texte als Reguläre Ausdrücke zu verarbeiten.

8.Falls der Reguläre Ausdruck nicht getestet werden soll, diesen Schritt überspringen. Falls ein Test gewünscht ist, "Test ausführen" anklicken. Im Fenster "Test für Funktion Suchen und Ersetzen" die Ausdrücke zum Suchen und Ersetzen sowie den Text eintragen, anhand dessen die Ausdrücke geprüft werden sollen, dann Testen anklicken. Werden keine weiteren Tests mehr gewünscht, OK anklicken.

9.OK anklicken.

10.Mit der Erstellung der Regel wie gewohnt fortfahren.

Die Implementation der Regulären Ausdrücke in SecurityGateway nutzt die Bibliothek PERL Compatible Regular Expression (PCRE). Sie erhalten nähere Informationen über diese Implementation der Regulären Ausdrücke unter http://www.pcre.org/ und http://perldoc.perl.org/perlre.html.

Eine umfassende Darstellung der Regulären Ausdrücke bietet Reguläre Ausdrücke (3. Auflage 2007), erschienen bei O'Reilly Media, Inc. Die englische Originalfassung Mastering Regular Expressions, Third Edition, ist ebenfalls bei O'Reilly Media, Inc. erschienen.