Bei Email: FW / AW... - Hilfe bei String suche

B

beta20

Top Contributor
Hallo,

ich möchte folgendes realisieren:
- Ich überwache mein Emailpostfach, ob neue Emails hereinkommen.
- Gibt es es zu einem Betreff und einer Emailadresse keinen Eintrag in meiner DB wird ein Ticket in der DB - Tabelle angelegt
- Gibt es zu einem Betreff und der Sender-Emailadresse einen Eintrag, wird nur ein Kommentar angelegt.

Soweit so gut.
Nun habe ich aber das Problem, dass bei verschiedenen Emailclients beim Antworten der Betreff geändert wird.
Aus: "1234567 - Mein Problem" wird dann "AW: 1234567 - Mein Problem".
Heißt selbst, wenn ich mit Wildcards suche, dann finde ich kein Match zu "AW: 1234567 - Mein Problem".

Wie könnte ich das lösen?
 
B

beta20

Top Contributor
Naja, kann es so machen - aber geht bestimmt auch besser?

Java:
     String subject = message.getSubject();
        subject = subject.replace("AW:", "");
        subject = subject.replace("Aw:", "");
        subject = subject.replace("FW:", "");
        subject = subject.replace("Fw:", "");
        subject = subject.replace("FWD:", "");
        subject = subject.replace("Fwd:", "");
 
M

Meniskusschaden

Top Contributor
Naja, kann es so machen - aber geht bestimmt auch besser?
Mit replaceAll() statt replace() kann man reguläre Ausdrücke verwenden:
Java:
subject = subject.replaceAll("^(\\s*(AW|Aw|FW|Fw|FWD|Fwd):)*\\s*", "");
Das aber nur nebenbei. Der Ansatz über die ID ist sowieso besser.
 
kneitzel

kneitzel

Top Contributor
subject.endsWith("1234567 - Mein Problem") liefert dann aber immer noch true.
Hier sehe ich nur das Problem, dass ein Betreff angeschnitten sein kann. Daher ist das endsWith ungünstig.

Wirklich effektiv dürfte daher wirklich rein die Prüfung einer ID sein.

Und entgegen EINER einzelnen Meinung: Reguläre Ausdrücke sind extrem mächtig und bieten sich hier förmlich an. Hintergrund ist ja, dass man ja bei einer beliebigen Email dann den Suchbegriff oder die ID finden möchte. Daher ist die Abfrage eines konkreten Falles ja weniger das Anwendungsgebiet (dann würde man die Datenbank durchgehen und für alle Datensätze einen String Compare machen?) sondern es ist eben:
- sinnvolle Verdichtung der Information (daher ist die eine Antwort für mich generell unverständlich. Informationen gehen nicht wirklich verloren, denn der Betreff ist weiter vorhanden. Es gab nur eine notwendige Verdichtung.)
- eine Abfrage auf der Datenbank, ob es da einen Datensatz zu gibt. (Mit index sehr optimiert)

Wenn man nicht nur auf eine ID zugreifen kann, dann sollte man neben dem Entfernen von typischen Ergänzungen überlegen:
- Filter Sonderzeichen - da kann ggf bei den Codierungen etwas schief gelaufen sein
- Längenbegrenzung falls etwas angeschnitten wird ...
Aber da kommt man dann auch evtl. in ein eigenes Spezialgebiet - ähnliche Texte finden .... SQL Server hätte da z.B. NEAR bei der Textsuche um da nur eine Sache aufzuzeigen.
Generell sehe ich da aber immer mögliche Probleme, die eine reine ID Suche evtl. weniger haben sollte (abhängig von den genauen Umständen, die noch nicht beschrieben sind.)
 
M

Meniskusschaden

Top Contributor
Reguläre Ausdrücke sind extrem mächtig und bieten sich hier förmlich an.
Sehe ich auch so. Ich würde die ID mit einem RegEx aus dem Betreff extrahieren und beim Erzeugen der IDs bereits darauf achten, dass die möglichst einfach erkennbar sind und eine geringe Wahrscheinlichkeit zur Verwechsung mit anderen Nummern besteht (z.B. durch ein Präfix wie im Beispiel von @thecain). Manchmal kommt es ja vor, dass eine IT-Abteilung selbst ein Ticket-System nutzt und im Zuge der Bearbeitung eine Anfrage an ein Systemhaus stellt, das ebenfalls ein Ticketsystem einsetzt. Dann hat man bald zwei Ticketnummern im Betreff, von denen nur eine relevant ist. In der DB stützt man sich ja sowieso im Wesentlichen auf die IDs, so dass es keine Performance-Probleme o.Ä. geben sollte.
 
B

beta20

Top Contributor
hm, also dann sowas wie:

Wie müsste dann solch ein Audruck aussehen, wenn er so aussehen soll:
[REQ12345]

Ggf. kann er auch so aussehen (prefix + suffix):
[REQ12345TEST]

-> Wobei dann REQ12345 oder REQ12345TEST sein kann
 
M

Meniskusschaden

Top Contributor
Z.B. der Ausdruck REQ\d{5}(TEST)? matcht auf ein Präfix REQ gefolgt von fünf Ziffern und einem optionalen Suffix TEST.
 
kneitzel

kneitzel

Top Contributor
Dann bauen wir das mal schrittweise auf:
1) Wir wollen die Daten, die "matchen" ja zurück bekommen, d.h. wir benötigen eine "capturing group". Dies sind einfach ( ) oder wenn man die mit ID will eben (?'ID'....) oder (?<ID>....) Damit haben wir schon einmal (?'ID')
2) Wir wollen die Zeichen REQ - die können wir 1:1 übernehmen: (?'ID'REQ)
3) Dann kommen Ziffern. Eine Ziffer kann ma n als \d oder als [0-9] angeben. Das aber genau 5 Mal: \d{5} Somit erhalten wir: (?'ID'REQ\d{5})
4) Nun wollen wir nichts oder TEST: (TEST|) - wobei das keine Capturing Gruppe sein muss, also (?:TEST|) so dass wir erhalten:

(?'ID'REQ\d{5}(?:TEST|))

Das kann man dann z.B. unter https://regex101.com/ testen.
 
B

beta20

Top Contributor
am liebsten wäre mir:
[a) 12345 b) ]

a) Kann jede Buchstabenfolge sein
b) nur Zahlen, maximal 10 Stück
c) Kann jede Buchstabenfolge sein

+ drumherum die Klammern
 
kneitzel

kneitzel

Top Contributor
Ahh ja: Die Eckigen Klammern fehlen bei mir auch ... also (?'ID'\[REQ\d{5}(?:TEST|\]))

Da dann noch die Erläuterungen zu dem, was Du noch findest:
Das Fragezeichen bei (TEST)? besagt: TEST einmal oder keinmal.
Die Backslash bei [ und ] sind Escape Zeichen. Mit [] werden eine Menge Zeichen zusammengefasst, also z.B. [a.z0-9] wäre ein Zeichen von a bis z oder 0-9.

am liebsten wäre mir:
[a) 12345 b) ]

a) Kann jede Buchstabenfolge sein
b) nur Zahlen, maximal 10 Stück
c) Kann jede Buchstabenfolge sein

+ drumherum die Klammern
Da sehe ich kein c) - aber das geht natürlich auch. Wobei die Frage ist, ob Du Buchstabenfolge bei a) noch eingrenzen kannst oder willst (mindestens 1 Zeichen, Maximal x Zeichen oder so?) Ansonsten wäre das dann:
a) Die Capturing Gruppe um die ID zurück zu bekommen: (?'ID')
b) Die eckigen Klammern (?'ID'\[\])
c) Beliebige Anzahl Buchstaben: (?'ID'\[[A-Za-z]*\]) *steht für kein bis beliebig viele.
d) 1-10 Ziffern: (?'ID'\[[A-Za-z]\d{1,10}*\]) die {} geben die Anzahl wieder, also {5} hatten wir schon {1,10} wären 1 bis 10 von dem vorhergehenden (hier Ziffern)

Falls ich das nicht richtig verstanden habe, dann kannst Du es evtl. noch anpassen.
 
B

beta20

Top Contributor
Sorry, meinte
[a) b) c) ]
-> Also a) und c) können Buchstaben sein.
-> b) ist die eindeutige Nummer aus der DB (Primary Key) , kann nur eine Zahl sein
a) und c) müssen nicht zwingend gefüllt sein. Also es könnte auch nur b) sein

Was ist daran falsch?
(\[[A-Za-z]*\d{1,10}*[A-Za-z]*\])

Als Beispiel:
[REQ1234RE]

Edit: das sollte passen:
(\[[A-Za-z]*\d{1,10}[A-Za-z]*\])

?
 
Zuletzt bearbeitet:
kneitzel

kneitzel

Top Contributor
Ja, sieht gut aus. Ich gebe den capturing groups nur gerne ids. Wenn man bei complexen Ausdrücken dann weitere Gruppen einfügt stimmt sonst hinterher die Nummerierung nicht mehr.
Und der Fehler war das * hinter der Anzahl der Ziffern, aber das hattest Du ja selbst erkannt.
 
B

beta20

Top Contributor
OK, danke..

Bekomme hier allerdings noch einen Fehler. Wie lautet das richtig dann?

Java:
    String ticketId = "";

        String regex = "(\\[[A-Za-z]*\\d{1,10}[A-Za-z]*\\])";

        Matcher matcher = Pattern.compile(regex).matcher(subject);

        matcher.find();

        if (matcher != null)

            ticketId = matcher.group(0);
 
M

Meniskusschaden

Top Contributor
Der Matcher matcher wird nicht null, wenn es keinen Match gab. matcher.find() liefert true, falls etwas gefunden wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
NicoDeluxe Java Email Templates Allgemeine Java-Themen 2
T @Email Allgemeine Java-Themen 42
B Java Mail: Prüfen, ob Email hat ein Anhang oder nicht Allgemeine Java-Themen 2
B Java Mail: Unterscheidung bei Attachments und eingefügte Bilder in Email Allgemeine Java-Themen 18
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
S Validation Null aber nicht Blank und muss Email sein Allgemeine Java-Themen 22
C Email Versand überprüfen Allgemeine Java-Themen 1
C Email mit public-key verschlüsseln Allgemeine Java-Themen 0
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
M Email-Versand Java+Outlook Allgemeine Java-Themen 8
T Email versenden Allgemeine Java-Themen 1
P "Email" versenden mit Anhang Allgemeine Java-Themen 5
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
A Email-Programm aus Applet öffnen Allgemeine Java-Themen 4
A Email versenden mehrere Zeilen Allgemeine Java-Themen 10
H RegEX und eMail Allgemeine Java-Themen 4
foobar Email mit Standard Mailclient versenden Allgemeine Java-Themen 12
Developer_X Email per Java senden Allgemeine Java-Themen 81
D Email versand bei einem festgelegten Datum Allgemeine Java-Themen 11
C automatische email nach 6 tagen! Allgemeine Java-Themen 14
D Email an mehrer Absender versenden Allgemeine Java-Themen 3
M Email - Informationen auslesen Allgemeine Java-Themen 3
N EMail-Versandt mit Java 6: komplexer Body Allgemeine Java-Themen 4
M kennt jemand nen gute email client in java mit imap? Allgemeine Java-Themen 3
L javaformular auf website (eingabe per email zusenden) Allgemeine Java-Themen 3
L Java & Excel & EMail Allgemeine Java-Themen 2
L Ping Probe auf hinteren Teil einer Email Adresse (nach @) Allgemeine Java-Themen 5
G EMail Client Allgemeine Java-Themen 7
K Email mit Anhang über mailto:. versenden Allgemeine Java-Themen 11
S eMail Dienst mit Java Allgemeine Java-Themen 3
A Regulärer Ausdruck EMail-Prüfung Allgemeine Java-Themen 3
S java mail API, email versenden Allgemeine Java-Themen 8
S standard-email-programm öffnen Allgemeine Java-Themen 4
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 4
alinakeineAhnungv Hilfe bei einem Straßenbahn-Projekt von mir Allgemeine Java-Themen 18
Aboya Kugel mit Hilfe von Dreiecken rekursiv zeichnen Allgemeine Java-Themen 2
K Anzeigemöglichkeit von Bildern in JavaFX mit Hilfe von MongoDB GridFS Allgemeine Java-Themen 0
A Preisberechnung, Hilfe Allgemeine Java-Themen 4
M Bräuchte Hilfe bei der Aufgabe Allgemeine Java-Themen 1
s_1895 Hilfe bei Java Tic Tac Toe Allgemeine Java-Themen 8
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
U Erste Schritte Hilfe bei simplem Glücsspiel in Java Allgemeine Java-Themen 4
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
K Objektorientierung, hilfe Allgemeine Java-Themen 9
V Bilder bei bestimmten Zeiten wechseln, bitte um Hilfe Allgemeine Java-Themen 5
D Hilfe bei Informatik Hausaufgaben Allgemeine Java-Themen 30
RalleYTN Brauche Hilfe beim Run-Length-Decoding Allgemeine Java-Themen 9
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
F NetBeans Hilfe!!! Allgemeine Java-Themen 23
H Schiffe versenken JButton Schiffe mit GUI verbinden Hilfe! Allgemeine Java-Themen 2
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
S GetMethode erstellen mit Hilfe von Parametern Allgemeine Java-Themen 9
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
B Hilfe bei Übungsblätter Allgemeine Java-Themen 9
O Erste Schritte Benzinverbrauch Code Hilfe Allgemeine Java-Themen 3
C Hilfe Bei Vegas Slide Allgemeine Java-Themen 0
B Hilfe!! spiel um Funktion des Selektierens erweitern (mit ASCII-Tabelle) Allgemeine Java-Themen 3
Ice4P4rty Hilfe Bei Promillerechner Allgemeine Java-Themen 9
C Atfx mit Hilfe von OpenAtfx auslesen Allgemeine Java-Themen 1
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
G Hilfe bei Projektarbeit Allgemeine Java-Themen 5
GenerationLost Input/Output Custom Serialization - hilfe bei Realisierung Allgemeine Java-Themen 8
J Hilfe!!! Ausbildung Allgemeine Java-Themen 14
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
T Hilfe bei Code Allgemeine Java-Themen 3
U Swing Hilfe beim Quellcode für ein Codierungs-/Decodierungsprogramm Allgemeine Java-Themen 9
S Hilfe bei Gui Allgemeine Java-Themen 3
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
GRAZZ0R Hilfe zum Spiel Mensch ärger dich nicht Allgemeine Java-Themen 1
C Hilfe bei den Ausgaben Allgemeine Java-Themen 4
K Hilfe bei GUI für Pizza-Service Allgemeine Java-Themen 11
J Hilfe bei Datumsberechnung aus Textfeld Allgemeine Java-Themen 10
I Bitte Drngend hilfe Allgemeine Java-Themen 2
C Hilfe bei NoClassDefFoundError Allgemeine Java-Themen 14
C Hilfe bei einer Fehler meldung Allgemeine Java-Themen 3
I Methoden Schnelle Hilfe benötigt - Kleines Video/Slideshow aus mehreren Bildern erstellen Allgemeine Java-Themen 3
C Hilfe bei einer Point Ausgabe Allgemeine Java-Themen 7
S Probleme mit meinem MacBook Pro DRINGEND HILFE erbeten! Allgemeine Java-Themen 17
N Erste Schritte [HILFE] effizienter,leistungsfähigermbackground Pixelbot Allgemeine Java-Themen 5
A Hilfe gesucht Allgemeine Java-Themen 44
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
C Hilfe bei einer Fehlermeldung Allgemeine Java-Themen 5
C Hilfe bei MalformedURLException Allgemeine Java-Themen 7
D Baum zeichnen hilfe Allgemeine Java-Themen 4
M Hilfe bei parseInt Allgemeine Java-Themen 4
F Compiler-Fehler Hilfe bei Startup error Allgemeine Java-Themen 3
D Mit Hilfe von Java aus Excel-Sheet Zellen in neues Excel Dokument kopieren Allgemeine Java-Themen 3
F Socket NullPointerException Bitte um hilfe! Allgemeine Java-Themen 12
M Input/Output Java + OCR ? Erfahrungen und bitte um Hilfe Allgemeine Java-Themen 12
M Brauche Hilfe bei Quellcodeverständnis Allgemeine Java-Themen 4
B Zahlen ausgeben hilfe! Allgemeine Java-Themen 8
S Java USB dringend Hilfe! Allgemeine Java-Themen 6
X Hilfe bei Programm Allgemeine Java-Themen 5
zer0zer0 Best Practice apache common cli - optionen für hilfe ausblenden Allgemeine Java-Themen 5
F Bitte um Hilfe! Allgemeine Java-Themen 5
S Hilfe bei geeignetem Pattern (Decorierer) Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben