Filtern mit Regular Expression von vierstelliger Zahl als Betreff

  • ich hab keine andere Abteilung gefunden, wo das Thema "Filtern" hingehören würde...

    Ein HInweis darauf, daß die RegExp in den Filtern nicht richtig funktionieren, oder nicht ganz gut beschrieben sind (Version 7.4.16).

    Ich krieg in letzter Zeit ziemlich viel Spam, bei dem das Betreff nur aus einer vierstelligen Zahl besteht, ganz willkürlich zusammengewürfelt (ich hab zumindest nicht versucht, ein Muster darin zu finden).

    Das ist ja der STandardfall für einen Filter "entspricht allen" mit "regular expression", welche lautet \d{4}

    M.e. sollte das "matchen", wenn das Betreff genau aus vier Ziffern besteht; tatsächlich aber werden alle Betreffs gefunden, wo irgendwo im String eine vierstellige Zahl vorkommt, z.B. die Jahreszahl 2017.

    Lösung: ein ^ für "am Anfang des String" und ein $ für "am Ende des String", also so: ^\d{4}$. Dann klappts.

    In der Online-Hilfe finde ich leider keine Erläuterungen zu den einzelnen Filterbedingungen.

  • Ich kapiere auch nicht die Filterbedingungen.


    Code
    entspricht              match des Regex
    entspricht nicht        negativer match des Regex
    entspricht einem von    ???
    entspricht allen        ???

    Schlimm genug, es existieren keinerlei Beispiele!


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

  • Ich habe den Support angeschrieben, sie mögen (mir) das doch besser erklären.

    Oder weiß das jemand genauer hier wie der Operator greift bei den Filter-Bedingungen?


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

  • Wenn der Betreff nur aus vier Ziffern besteht, ist dieser Regex nötig:

    Betreff entspricht ^\d{4}$


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

  • Wenn man sich bei einem übersetzten Programm nicht sicher ist, sollte man die Originalsprache verwenden, hier also Englisch. Auf Englisch steht im Filtermanager vor allem "contain" (also "enthalten") und "match" (also "übereinstimmen"). Im ersten Fall reicht es also aus, wenn der gesuchte Begriff lediglich enthalten ist. Im zweiten Fall muss hingegen z.B. die Betreffszeile mit dem gesuchten Begriff vollständig übereinstimmen.

    Man kann bekanntlich mehrere Suchbegriffe in einer Zeile verwenden und diese voneinander durch Pipes (also senkrechte Striche wie "|") trennen. "matches any of" bedeutet also, dass einer von den eingegebenen Begriffe vollständig übereinstimmen muss. Das verkürzt die Filterbedingung, denn sonst müsste man mehrere Blöcke erstellen, z.B. Subject matches 1 OR Subject matches 2 OR Subject matches 3. Stattdessen verwendet man lediglich Subject matches any of 1 | 2 | 3.

    Nicht verständlich ist nur, wozu man noch zusätzlich "is" (also "ist") braucht, denn sinngemäß muss es mit "match" identisch sein.

  • Aber das ist doch genau der Punkt. Unnötige Doppelungen.
    Das ist ja irritierend.

    Ob sich schreib:
    Subject matches any of 1 | 2 | 3.
    oder
    Subject matches (1|2|3)
    ist doch dasselbe.


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

  • Ob sich schreib:
    Subject matches any of 1 | 2 | 3.
    oder
    Subject matches (1|2|3)
    ist doch dasselbe.


    IMO bedeutet "matches any of" ENTWEDER-ODER, während einfach "matches" ALLES bedeutet, d.h. bei

    Code
    Subject matches any of 1 | 2 | 3


    muss entweder 1 oder 2 oder 3 erfüllt sein und bei

    Code
    Subject matches (1|2|3)


    1, 2 und 3 zusammen.

  • Ich tu mir selbst als ITlerin schwer mit der Interpretation, ich verstehe das seit Jahren nicht oder anders. Und so wie bei The Bat! sind mir Regeln-Syntaxe auch nicht bekannt bei anderen Programmen.
    Di Syntax der Regeln ist ja schlimmer als manches obfuskierte Perl-programm. ;=

    Ich habe dem Support geschrieben, das braucht eine erweiterte Erläuterung.

    Ich weiß schon warum ich nur match und contains nehme.
    Das ist eindeutig.


    The Bat! Pro 11.x BETA (32bit) | Win 11 Pro x64 | GnuPG 2.4.x | XMP + Regula

    Wer mich Er oder der Drache nennt, bekommt von der Drachin Pratze und Feuer zu spüren.

  • Wenn man sich bei einem übersetzten Programm nicht sicher ist, sollte man die Originalsprache verwenden, hier also Englisch. Auf Englisch steht im Filtermanager vor allem "contain" (also "enthalten") und "match" (also "übereinstimmen").


    Die Originalsprache ist wohl eher moldawisch, zumindest die der Entwickler.

    Und jetzt mit englischen Begriffen daherzukommen, wo hierzulande normalerweise die deutsche Programmversion installiert ist, hilft ja nun auch nicht.

    Die Bedingungen mit

    • ist
    • enthält (einschließlich "mindestens eines fehlt"
    • beginnt
    • endet

    sind ja einigermaßen klar, nicht ganz klar ist, was bei entspricht gemeint ist. Das kommt nur im Zusammenhang mit Musterausdrücken à la "regular expression" vor.

    Ich hatte es erst mit entspricht allen versucht, und da hat das Ergebnis nicht mit dem übereingestimmt, was man von der Anwendung einer "regular expression" erwartet. Es hat so gearbeitet als ob ich nicht \d{4} geschrieben hätte, also der untersuchte String genau dem Suchausdruck entsprochen hätte, also aus genau vier Ziffern bestanden hätte.

    Das Ergebnis entsprach der Anwendung eines Regelausdrucks wie .*\d{4}.*, also vier Ziffern mit beliebig vielen (auch null) beliebigen Zeichen davor und dahinter -- der Punkt . steht dabei für "beliebiges Zeichen" und der Stern * für "kann null oder beliebig oft vorkommen".

    Was das "allen" in "entspricht allen" gegenüber dem einfachen "entspricht" verändert, ist (mir) nicht klar.

    Ich würde es aber gerne wissen.

  • IMO bedeutet "matches any of" ENTWEDER-ODER, während einfach "matches" ALLES bedeutet, d.h. bei

    Code
    Subject matches any of 1 | 2 | 3

    muss entweder 1 oder 2 oder 3 erfüllt sein und bei

    Code
    Subject matches (1|2|3)

    1, 2 und 3 zusammen.


    1. KÖnnten wir bitte mit den Ausdrücken diskutieren, die im Programm mit der (hierzulande üblichen) deutschen Benutzeroberfläche tatsächlich verwendet werden?

    2. Wenn das (1|2|3) in Subject matches (1|2|3) ein "regular expression" sein soll, dann bedeutet diese Formulierung "eines von 1, 2 oder 3".

    3. man kann für Code, der nicht über eine kurze Formel hinausgeht, statt dem auf mehrzeiligen Text ausgelegten </> auch den "inline code" verwenden, das letzte Symbol in der Symbolzeile oberhalb des Editierfelds: >_. Das sieht m.E. besser aus.

  • Die Originalsprache ist wohl eher moldawisch, zumindest die der Entwickler.

    Wohl eher Russisch, da dort vorwiegend Russen arbeiten. Entscheidend ist aber, dass sie auf Englisch programmieren, so dass die Hauptsprache von TB! Englisch ist. Ansonsten sind dir wohl die Hintergründe nicht bekannt. Übersetzungen werden nicht von Ritlabs erstellt (höchstens die russische), sondern von Freiwilligen, die mit der Firma nichts zu tun haben. So ist die dt. Sprache seinerzeit von einem dt. Team erstellt worden und wurde später von einem anderen Team übernommen und weitergeführt. Wir haben dazu ein separates Unterforum. Das bedeutet wiederum, dass Ritlabs nicht garantieren kann, dass Übersetzungen mit dem Original übereinstimmen. Welche Übersetzung man für z.B. "match" genommen hat, ist also eine Sache des Übersetzers. Daher habe ich geschrieben, dass man im Zweifelsfall auf das Original zurückgreifen soll.


    Das kommt nur im Zusammenhang mit Musterausdrücken à la "regular expression" vor.

    Im Falle von TB! kann "entspricht" nicht nur mit RegEx verwendet werden. Nur in der dt. Übersetzung steht RegEx neben "entspricht". Dieser Befehl funktioniert aber auch dann, wenn man übliche Zeichen etc. verwendet.


    Was das "allen" in "entspricht allen" gegenüber dem einfachen "entspricht" verändert, ist (mir) nicht klar.

    Wie ich bereits geschrieben habe, sind die beiden letzten Befehle nur dann relevant, wenn man mehrere Begriffe oder RegExes durch Pipes getrennt in eine Zeile eingibt. Weil das wohl nicht sehr oft vorkommt, hat man diese Befehle ans Ende der Liste gesetzt. Ansonsten müssen bei "entspricht allen" alle Begriffe oder RegExes vorkommen, während bei "entspricht einem von" das Entweder/Oder-Prinzip herrscht.

    Verwendet man aber nur einen Begriff bzw. RegEx, dann wird natürlich sowohl "entspricht" als auch "entspricht allen" das gleiche Resultat liefern.


    KÖnnten wir bitte mit den Ausdrücken diskutieren, die im Programm mit der (hierzulande üblichen) deutschen Benutzeroberfläche tatsächlich verwendet werden?

    Können wir. Zur Übersetzung s. aber oben. Ob sie zutrifft, ist also nicht garantiert.


    Wenn das (1|2|3) in Subject matches (1|2|3) ein "regular expression" sein soll, dann bedeutet diese Formulierung "eines von 1, 2 oder 3".

    Die Filterbedingung heißt richtigerweise Betreff - entspricht - 1 | 2 | 3 mit Leerzeichen zwischen den Pipes und soll bedeuten, dass 1, 2 UND 3 vorhanden sein müssen. Für ODER verwendet man Betreff - entspricht einem von - 1 | 2 | 3. Soweit zumindest die Theorie.

  • Die Filterbedingung heißt richtigerweise Betreff - entspricht - 1 | 2 | 3 mit Leerzeichen zwischen den Pipes und soll bedeuten, dass 1, 2 UND 3 vorhanden sein müssen. Für ODER verwendet man Betreff - entspricht einem von - 1 | 2 | 3. Soweit zumindest die Theorie.

    Ich schrieb: wenn das (1|2|3) ein Musterausdruck im Sinne von "regular expressions" sein soll, dann bedeutet der senkrechte Strich ein entweder-oder

    Wenn ich mit "regular expressions" arbeiten kann, dann stören die Zusätze zum "entspricht" nur, denn das kann man viel präzieser in RegExp selbst ausdrücken, da ist das dann nicht so mißverständlich.

    Jetzt hab ich aber noch eine Frage, was für ein Dialekt von "regular expressions" bei TheBat! zur Verfügung steht. Ich hatte ja ^\d{4} geschrieben, um mit dem Accent Circonflex ^ auszudrücken, daß diese vier Ziffern am Anfang des zu untersuchenden Strings stehen müssen. Woanders dient das Accent Circonflex zur Negation, also ein ^\d hieße "keine Ziffer".

    Übrigens dachte ich, daß mehrere Suchbegriffe in Zeilen getrennt eingegeben werden.

  • Wenn ich mit "regular expressions" arbeiten kann, dann stören die Zusätze zum "entspricht" nur, denn das kann man viel präzieser in RegExp selbst ausdrücken, da ist das dann nicht so mißverständlich.

    Es kann vielleicht vorkommen, dass man aus irgendeinem Grund nicht alles zusammen vermischen möchte oder kann. Nicht jeder kann mit RegEx umgehen.


    Jetzt hab ich aber noch eine Frage, was für ein Dialekt von "regular expressions" bei TheBat! zur Verfügung steht.

    Vielleicht hilft das hier weiter: "Reguläre Ausdrücke in TB!". In der offiziellen Online-Hilfe steht unter "Reguläre Ausdrücke" auch etwas.


    Woanders dient das Accent Circonflex zur Negation

    Wo denn? Ich dachte immer, dass es nur eine einzige RegEx-Form gibt.


    also ein ^\d hieße "keine Ziffer".

    Keine Ziffer ist \D und der Zirkumflex steht eigentlich immer für den Zeilenanfang.

  • Das Accent Circonflex (auf englisch auch Caret-Zeichen genannt) dient zur Negation in "Bracket-Expressions", habe ich gerade nachgelesen in meinem Ausdruck der Einführung zu RegExp in VBScript und JScript.

    Also ein [^abcDEF] paßt nur auf Strings, in denen weder kleingeschriebene a, b oder c, noch großgeschriebene D, E oder F vorkommen.

    Aber wie schreibe ich als RegExp die Bedingung, daß in einem zu überprüfenden String keine vierstelligen Zahlen vorkommen?

    Bis vor kurzem waren für mich "regular expressions" auch eher ein rotes Tuch, viel zu kompliziert und unübersichtlich. Das hat sich geändert durch die Entwicklung eines VBscript, das eine beliebige Zahl von RegExp Suchen/Ersetzen Ausdrücke einliest und die auf alle HTML-Dateien in einem Verzeichnis anwendet. Und ich sage jetzt, daß es sich lohnt, diese Technik zu erlernen.

    Die Seite https://www.batboard.net/www.regenechsen.de hatte ich schon gefunden, aber noch nicht über die Einstiegsseite hinaus angesehen.

    Bei dem Editor UltraEdit, den ich seit 2002 benutze kann man zwischen verschiedenen Dialekten von RegExp wählen: UE-eigen, Unix, und Perl.

  • S.o. - mit \D. Großbuchstaben stehen bei RegEx für Negationen.

    Der Ausdruck \D{4} trifft auf jede Folge von vier Zeichen, die keine Dezimalziffern sind, also jedes Tupel von vier Zeichen in diesem Satz. Auf ABCD auf XYZK auf "vier" auf "eiche" usw usf. Damit finde ich nicht heraus ob eine Folge von 4 Dezimalziffern nicht in dem zu untersuchenden String vorkommt. Daß in diesem Absatz mit der Jahrezahl 2017 jetzt auch eine Folge von vier Dezimalziffern vorkommt, ändert daran nichts.

    Bei TheBat! könnte allerdings ein "entspricht nicht" mit dem urspünglich von mir vorgestellten Ausdruck \d{4} zum gewünschten Erfolg führen. Auf den ersten Satz in obigem Absatz müßte das zutreffen, auf den 2. Satz nicht, weil darin ja eine Folge von vier Ziffern vorkommt. Das ist dann aber nicht komplett als "regular expression" formuliert.