Reg Ex für Mailfilter gesucht
Friedel
- regex
Hallo, ich habe einen neuen Mailprovider und lege gerade neue Postfächer an. Bei diesem Provider habe ich die Möglichkeit "relativ einfach" mit Reg Ex Filter an zu legen.
Ich habe ein Postfach, das ausschließlich für die Kommunikation mit einer bestimmten Firma gedacht ist. Die Firma verwendet als Absenderadresse immer Adressen, die mit "@firmenname.de" enden. Jetzt möchte ich einen Filter anlegen, der alles andere rausfiltert.
Mit @firmenname\.de$
wird alles von dieser Firma gefiltert. Ich möchte aber genau das Gegenteil. Alles außer @firmenname\.de$
soll gefiltert werden. Wie kann ich das erreichen?
Hallo Friedel,
Mit
@firmenname\.de$
wird alles von dieser Firma gefiltert. Ich möchte aber genau das Gegenteil. Alles außer@firmenname\.de$
soll gefiltert werden. Wie kann ich das erreichen?
Nennt sich negative lookahead
^[^@]+(?!@firmenname\.de)$
Bis demnächst
Matthias
Danke. Ich hab's zwar noch nicht ganz begriffen, aber mit dem Suchbegriff "negative lookahead" sollte das kein Problem mehr sein. Jedenfalls habe ich damit einige Erklärungen gefunden, die auf den ersten Blick gut aussehen.
Hallo Friedel,
Danke. Ich hab's zwar noch nicht ganz begriffen,
^[^@]+(?!@firmenname\.de)$
^
- der Anfang der Zeichenkette
[^@]
- alle Zeichen außer das @
+
- mindestens 1 davon
(?!@firmenname\.de)
- alles außer @firmenname.de
$
- das Ende der Zeichenkette
Bis demnächst
Matthias
Hallo Matthias,
den Haken kann ich nicht wegnehmen, das kann nur Friedel. Drum hab ich ein Minus gesetzt.
Diese Regex funktioniert nicht.
^[^@]+(?!@firmenname\.de)$
bedeutet:
Problem 1: Satz 1 und 2 führen dazu, dass keine gültige Mailadresse matcht (weil die immer ein @ enthält)
Problem 2: Der Punkt, ab dem der Lookahead schaut, ist das Stringende. Da steht niemals @firmenname.de
Entweder so: ^[^@]+@(?!firmenname\.de$)[^@]+$
Das $ im Lookahead ist wichtig, sonst würde aufdringlich@example.deals akzeptiert (wenn denn "example.de" die richtige Firmenadresse wäre.
Alternativ kann man mit einer Lookbehind-Assertion (?<!...) arbeiten, dann geht's so:
^.*(?<!@firmenname.de)$
Diese Regex matcht alles, was nicht mit @firmenname.de endet. Dass vor dem @ kein weiteres @ mehr stehen darf, wird ignoriert, ist auch nicht wichtig für die Filterung. Hoffe ich...
Regexe bauen, testen und lernen geht dank Herrn Firas Dib unter https://regex101.com
Rolf
Danke. Funktioniert sehr gut. ^.*(?<!@firmenname.de)$
ist das, was ich eigentlich wollte. ^[^@]+@(?!firmenname\.de$)[^@]+$
ist zwar von der Logik her was anderes, führt aber zum selben Ergebnis. Zumindest, wenn man es korrigiert. Natürlich muss es ^.*(?<!@firmenname\.de)$
heißen. Ich könnte mir Vorstellen, dass man sonst Beispiele konstruieren kann, bei denen es nicht funktioniert. Zumindest wenn der String, der hier durch "firmenname" ersetzt wurde, mindestens einen Punkt enthält.
den Haken kann ich nicht wegnehmen, das kann nur Friedel.
Aber jetzt brauche ich ihn ja nicht mehr weg zu nehmen 😉. Mit deinem Beitrag war es einfacher, aber mit Hilfe des Suchbegriffs "negative lookahead" habe viele Infos gefunden, die mir geholfen haben und wohl auch zur Lösung geführt hätten.
Hallo @Friedel,
unterstützt Dein Mailprovider nicht auch Sieve?
Das währe einfacher (Adressen-Matching)