Laden...

Regexpattern in IMAP-Searchstrings konvertieren

Erstellt von BlackMatrix vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.554 Views
B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 9 Jahren
Regexpattern in IMAP-Searchstrings konvertieren

Hallo,

Ich habe einen Regex, den ich auf einen IMAP-Server loslassen will. Das IMAP Protokoll unterstützt keine regulären Ausdrücke, daher will ich einen möglichst guten Vorfilter entwickeln, der auf Basis eines Regex ein Searchcommand beim IMAP-Server veranlasst.

Um mal ein Beispiel zu nennen. Wird auf dem Client mit dem Pattern: "mycsharp|myexample" im Betreff der E-Mail gesucht, soll auf dem Server "OR SUBJECT mycsharp SUBJECT myexample" ausgeführt werden.

Mir ist klar, dass nicht die komplette Regexfunktionalität damit abgebildet werden kann, daher soll auch nur ein möglichst guter Filter für die in Frage kommende Mails erstellt werden.

Ich hab zwar schon eine Idee, wäre aber gerne für eure alternative Ansätze dankbar.

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo BlackMatrix,

wenn du einen Ansatz hast, was ist denn dein Problem oder was gefällt dir daran nicht?

Schwer zu sagen, ob es was besseres/einfacheres gibt, wenn du nicht sagst, was du für einen Ansatz hast.

herbivore

B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 9 Jahren

Es hängt wohl auch davon ab, in wie weit man den Regex auf IMAP-Ebene nachbauen möchte. Ich glaube es macht wenig Sinn, wenn man für "mycsharp\w" ein OR-Command für alle als "\w" definierten Zeichen (Buchstaben, Ziffern, ...) auslöst. Zumal sicherlich auch die Länge eines solchen Commands begrenzt ist.

Geht man davon aus, dass man nur '(', ')', '|', '{n}', '{n,m}', '+', ... als möglich anerkennt, bräuchte man, wie bei Regex einen Baum bei denen die Kinder ohne Kinder die unveränderlichen Patternteile als Teilcommand zusammenführen.

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo BlackMatrix,

wenn du sowieso nur einen Teil der Regex-Syntax umsetzen willst oder kannst, dann ist die Frage, warum es Regex sein soll/muss? Klar, die Regex-Syntax ist bekannt, aber du müsstet den Leuten dann eh sagen, was sie davon benutzen dürfen und was nicht (wobei das Nicht-Dürfen mehr sein wird als das Dürfen). Dann könntest du ihnen vielleicht besser gleich eine für die Aufgabe angepasste Syntax anbieten.

Ansonsten kann ich in deiner Antwort weder ein konkretes Problem, vor dem du stehst, noch eine konkrete Frage entdecken und kann daher auch nicht mehr schreibst.

herbivore

B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 9 Jahren

Nun, die E-Mails sollen anschließend sowieso mittels Regex durchsucht werden können, daher wäre es von Vorteil, wenn man eben nicht alle E-Mails herunterläd, sondern eine gewisse Filterung auf Basis des Regex beim Server bereits auslösen kann. Zusätzlich bedarf es dann auch nur die Eingabe eines Pattern.

Wenn der Regex ausschließlich aus variablen (Meta-)Zeichen besteht, dann natürlich keine Filterung beim Server, alles andere vorzufiltern wäre schön.

Direkte Frage habe ich keine, mir ging es um den Ansatz. Ich hatte auch daran gedacht mir ein paar Codeteile über Reflection aus dem .NET Framework zu holen.

Evtl. gibt es auch schon irgendwo eine Funktion, die mir aus einem Pattern, die statischen Teile herauszieht.

Edit:

Ich glaube ich habe einen recht guten Ansatzpunkt gefunden. Der interne RegexParser stellt eine Methode Parse zur Verfügung. Dadurch wird der Regexbaum aufgespannt und jedes Element enthält den Wert, Anzahl der Wiederholungen (n,m) und einen Type. Damit könnten sich die statischen Anteile ermitteln lassen.

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo BlackMatrix,

wenn du etwas brauchbares zusammenbekommst, wäre das sicher was für .NET-Komponenten und C#-Snippets.

herbivore