ChrisB: MySQL : mit regulären Ausdrücken Wörter für Buchstaben suchen

Beitrag lesen

Hi,

bevor man sich darüber zielführend Gedanken machen kann, müssten erst mal ein paar Einzelheiten der Aufgabenstellung exakter spezifiziert werden.

Ich habe eine meiner Meinung nach nicht sehr komplexe Anwendung geschrieben, die mit Hilfe einer Worttabelle die Wörter herausfiltert, in denen die vom Nutzer eingegebenen Buchstaben vorkommen. Z.B. gibt der Nutzer "eehgnd" ein und bekommt sortiert nach Länge Ergebnisse wie "gehend, hegend, gehen, hege", etc. [...]

Das Problem: Es werden auch sämtliche Wörter gefunden, in denen die Buchstaben mehrfach vorkommen. Ich suche also nach einer Möglichkeit, das Vorkommen einzelner Buchstaben zu beschränken. "E" kommt ja z.B. maximal zweimal vor.

Es sollen also alle Wörter gefunden werden, die nur *genau* die vom Nutzer eingegebenen Zeichen enthalten, also auch von der Anzahl Buchstaben her der Länge der eingegebenen Buchstabenkette entsprechen?

Alle Wörter sind ausschließlich in Großbuchstaben in der Tabelle enthalten.

Enthalten die zu durchsuchenden "Wörter" also ausschliesslich Grossbuchstaben - oder können es auch noch andere, nicht-buchstaben-Zeichen sein?

Bzw. in einer nächsten Stufe dann noch plus einem zusätzlichen beliebigen Buchstaben, der mittels dem Jokerzeichen dargestellt werden soll. Da käme dann die Frage auf: Darf bei Suche nach EEHGND* (* sei mal das Jokerzeichen) dann auch ein Wort gefunden werden, welches drei E enthält, oder müssen es zwei E und noch ein zusätzlicher Buchstabe, der in den anderen Suchbuchstaben nicht enthalten ist, sein?

Derzeit muss ich in einem zweiten Schritt via PHP die zusätzlich gefundenen Wörter vor der Ausgabe löschen. Diesen zweiten Schritt würde ich mir gerne ersparen. [...]
Auch hier wieder das Problem, dass ich nachträglich mit PHP aussortieren muss.

Ob sich das (performant) komplett DB-seitig lösen lässt, vermag ich gerade nicht zu sagen.

Ich würde vielleicht bei der Suche nach EEHGND bzw. EEHGND* erst mal alles per REGEX aus dem zu durchsuchenden String entfernen, was *nicht* einem der fünf Buchstaben E G H N D entspricht - und dann die Länge davon betrachten, ob sie im ersten Falle kleiner 6 bzw. im zweiten kleiner 7 Zeichen ist.

Damit wäre der Bereich der potentiellen Kandidaten schon mal recht gut eingeschränkt.
Die Prüfung, ob sie auch den darüber hinaus gehenden "schärferen" Kritieren entsprechen, würde ich dann vermutlich wirklich lieber scriptseitig machen - per REGEX kann ich mir jedenfalls kaum einen Weg vorstellen, das in irgendeiner Weise performant abzubilden.

MfG ChrisB

--
„This is the author's opinion, not necessarily that of Starbucks.“