Willkommen im User-Forum von mailbox.org
 

Frage zu Filter / Regex: Wort vom Matching ausschließen

Fabian hat dies geteilt, 8 Monaten her
unbeantwortet

Ist hier jemand, der sich etwas tiefer mit Regex und den Filterregeln auskennt? Ich möchte für eine Bedingung auf bestimmte Wörter im Betreff checken, aber ein Wort (aus diversen Gründen) ausschließen.

In dem konkreten Beispiel möchte ich das Wort "Kleinanzeigen" vom Matching ausschließen. Mit folgendem habe ich es erfolgreich auf https://regexr.com/ getestet (kann die Seite zum Rumtesten übrigens nur wärmstens empfehlen!). Wenn ich eine Mail mit "Kleinanzeigen" im Betreff habe, wird diese jedoch trotzdem gematched:

Bedingung / Regex: (Angebot|Anzeige|^Kleinanzeigen)

Eigentlich sollte durch ^blah, das Wort "blah" doch vom Matching ausgeschlossen werden, oder übersehe ich etwas?


Wenn ich nur


Bedingung / Regex: (Angebot|Anzeige)

nehme, matched jedoch auch "Kleinanzeigen", was ich nicht möchte.

Beste Antwort
Foto

Mich wundert etwas, dass der zweite Filter im Ursprungspost funktioniert, denn eigentlich sollte der reguläre Ausdruck auch Groß- und Kleinschreibung beachten.

Folgender Ausdruck funktioniert mit den Settings "g" (global) und "i" (case-insensitive) für PCRE:

\b(?!(?:Kleinanzeigen)\b)\w*(?:Anzeige|Angebot)\w*\b

Erklärung: https://stackoverflow.com/a/66000715

Ansonsten wäre es aber vermutlich einfacher, eine zweite Nicht-Regex-Bedingung zu definieren:

1. Regex (Angebot|Anzeige)

2. und enthält nicht "Kleinanzeigen".

Antworten (2)

Foto
1

Update: statt:

Bedingung / Regex: (Angebot|Anzeige|^Kleinanzeigen)


habe ich jetzt mit diesem Regex auf regexr.com erfolgreich testen können:

Bedingung / Regex: (Angebot|^Anzeige[n]?$)

Der Ausdruck matched im Betreff “Anzeige” und “Anzeigen”, nicht jedoch “Kleinanzeigen”. Im Mailbox.org Filter funktioniert er aber nicht - ich vermute ich muss in der Filterbox wo man die Bendingungen einfügt, noch Sonderzeichen escapen? Ist dies der Fall?

Ich habe leider nirgends ein gutes Beispiel für Regexe bei Mailbox.org gesehen und kann daher nur mutmaßen. Auf https://www.kuketz-blog.de/mailbox-org-verlaesslich-und-vertrauenswuerdig-e-mails-unter-kontrolle-teil2/ ist ein Beispiel zu sehen wo der Punkt “.” mit einem Backslash escaped wurde. Hat hier jemand einen Regex bei sich in Verwendung und kann teilen, wie er/sie mit Sonderzeichen im Regex Filter umgegangen ist?

Foto
2

Mich wundert etwas, dass der zweite Filter im Ursprungspost funktioniert, denn eigentlich sollte der reguläre Ausdruck auch Groß- und Kleinschreibung beachten.

Folgender Ausdruck funktioniert mit den Settings "g" (global) und "i" (case-insensitive) für PCRE:

\b(?!(?:Kleinanzeigen)\b)\w*(?:Anzeige|Angebot)\w*\b

Erklärung: https://stackoverflow.com/a/66000715

Ansonsten wäre es aber vermutlich einfacher, eine zweite Nicht-Regex-Bedingung zu definieren:

1. Regex (Angebot|Anzeige)

2. und enthält nicht "Kleinanzeigen".

Foto
1

Danke Dir, Stephan! Sehe schon, dass Du dich auskennst in dem Thema, top! Cooler Ausdruck den Du da hergezaubert hast, habe den mal in regexr.com reingeworfen und mit rumgespielt - sieht gut aus! Muss ich mir noch mal im Detail ansehen, um den Regex besser zu verstehen.


Ein paar generelle Fragen noch:


1. Ich dachte “g” und “i” ist quasi schon mailbox.org-seitig als Default vorgegeben? Ist das so?

2. Welche Regex-“Engine” ist mailbox.org-seitig für die Filter am Laufen? kann ich alles machen, was quasi dem PCRE Standard entspricht?

3. Hast Du eine Idee, wieso er (Angebot|^Anzeige[n]?$) nicht akzeptiert fürs Matching?


Eine weitere Bedinung hinzuzufügen um den “Kleinanzeigen” String im Betreff auszuschließen … daran habe ich gar nicht gedacht, macht es natürlich einfacher! Irgendwie hatte ich den Ehrgeiz alles in einem Regex mit einer einzelnen Regexbedingung abzufrühstücken. ;-)

Foto
2

Ja, ich arbeite seit über 20 Jahren immer mal wieder mit regulären Ausdrücken. Ein wirklicher Profi bin ich aber nicht, zumal es ja zig verschiedene Dialekte gibt. Dein Problem fand ich aber so interessant, dass ich mich ne knappe Stunde drangesetzt habe. :)

Zu Deinen Fragen:

  1. Den Default bei mailbox.org bzw. die verwendete Engine kenne ich nicht. Im Standard steht allerdings etwas von "Implementations MUST support extended regular expressions (EREs)" (Kapitel 6)
  2. siehe 1.
  3. Wenn Du den Ausdruck so auf regexr.com eingibst, kannst Du über die Zeichen hovern und siehst die Dokumentation. Das Zeichen "^" steht entweder für "Anfang der Zeile" oder "kein Zeichen der folgenden Menge", je nach Kontext. Das ist keine generelle Negation, mit der man Wörter ausschließen könnte.

Foto
1

Danke Stephan! Komplexes Thema - etwas sperrig um reinzukommen, aber ich finde mit Tools wie regexr.com kann man sich die Ausdrücke ja auch schön zusammenbauen und gleich testen was und ob es matched. Ich spiele mit Deinem Ausdruck aber noch mal weiter rum - hat in jedem Fall geholfen, besten Dank!

Allerletzte Frage damit ich es richtig verstanden habe: kann (muss?) ich die Begrenzer "/" wie im Screenshot mit in die Filtermaske bei mailbox.org mit eingeben? Und - das meinte ich in Bezug auf die "Defaultflags" in meiner vorherigen Frage - kann ich die ganzen optionalen Flags für bspw. "case-insensitive" usw. auch alle mitnutzen?

45e4a5986c65140be6fa300ba2cc9169Auch hier wieder Schade, dass es mailbox.org seitig so wenig Infos und Beispiele gibt, was mit den Regex-Ausdrücken unterstützt wird/was nicht und ob irgendwelche Sonderzeichen escaped werden müssen etc. Macht das Ganze sehr mühselig.

Foto
2

Da ich bisher nicht mit regulären Ausdrücken gearbeitet habe, kann ich das mit den Begrenzern leider nicht sagen. Oder besser konnte, denn natürlich musste ich das jetzt einfach mal ausprobieren. :)

Test-Setup: Die Benachrichtigung über Deine Antwort mit dem Betreff "Neuer Kommentar..." liegt im Posteingang. Dann habe ich eine Regel geschrieben, die für den regulären Ausdruck

/^Neuer/g
die Farbe auf "rot" ändern soll. Beim Speichern kann man eine Regel auch direkt auf einem Ordner ausführen lassen. Passiert ist nichts, daher gehe ich davon aus, dass man nur den Innenteil angeben darf. Mit

^Neuer
hat es dann funktioniert. Interessanterweise auch mit

^neuer
Daher gehe ich davon aus, dass die Groß- und Kleinschreibung wirklich ignoriert wird.

Hinweis: Beim Testen hatte ich manuell die Farbe wieder zurückgesetzt, ein weiterer Durchlauf hat sie nicht wieder neu gesetzt. Eventuell werden hier manuelle Änderungen nicht überschrieben. Die Aktion "Kopieren nach" hat aber immer funktioniert und eignet sich damit gut zum Testen.

Foto
2

Danke Stephan für Dein Testing und Deine Hilfe - habe ich jetzt genug ausgereizt ;-) Wie gesagt, spannendes Thema und auch beliebig komplex - je nachdem, wieviel Logik man sich zutraut mit einem Regex zu implementieren. Am Ende ist es viel rumbauen und testen ... aber die Hinweise von Dir sind sicher auch für andere spannend, die mit Regexen für ihre Filter hier etwas tiefer abtauchen wollen. Noch mal tausend Dank!

Foto
Hinterlassen Sie einen Kommentar
 
Dateianlage anfügen