2016-09-07 4 views
1

Ich habe ein Puzzle, wo die Spieler so viele Wörter wie möglich machen können, mit den Buchstaben eines bestehenden 9-Buchstaben-Wortes. Angenommen, Sie haben "Wasserfall". Nehmen Sie die Buchstaben und Neuanordnung Sie können Wafer, Fehler, links ect machen.Regex, um Wörter aus Buchstaben zu finden

Derzeit verwende ich einen Ausdruck, wie diese auf meiner Wortliste aussieht:

^(?:([waterfall])(?!.*?1)){1,9}$ 

Aber das Problem ist, dass dies auch Buchstaben erlaubt, die nur einmal erscheinen, zu zweimal verwendet werden, wie Freeware (drei Es) und Tatter (drei Ts).

Ab jetzt iteriere ich einfach meine Wortliste und zähle Buchstaben und stelle sicher, dass das vorgeschlagene Wort keine höhere Anzahl pro Buchstabe als mein Ursprungswort enthält. Aber das scheint ein bisschen ermüdend, und mein Bauchgefühl sagt mir, dass es möglich sein sollte sicherzustellen, dass der Ausdruck tatsächlich nur jeden Buchstaben einmal (oder zweimal, wie das L, wenn es zweimal im Ursprungswort ist) verwendet.

Ich habe die Dokumentation durchgesehen, aber es ist alles ziemlich griechisch für mich, und fragte mich, ob die schönen Stapler einen Vorschlag hatten.

+1

Nur um zu verdeutlichen: '[Wasserfall]' sucht nicht nach dem Wort 'Wasserfall', sondern erlaubt stattdessen einen Buchstaben der Zeichenklasse. Es kann sogar als '[aeflrtw]' umgeschrieben werden und würde die gleichen Wörter erlauben (dies löst aber leider nicht dein Problem: =)) Was du suchst, heißt ** Permutation **. – Jan

+0

Welchen Regex-Dialekt verwenden Sie? – bwoebi

+2

Ich denke nicht, Regex ist eine geeignete Lösung dafür - Sie müssten die richtige Menge jedes Buchstaben in einem separaten Lookahead überprüfen, wie ['^ (?! (. * W) {2}) (?! (. * a) {3}) (?! (. * t) {2}) (?! (. * e) {2}) (?! (. * r) {2}) (?! (. * f) {2}) (?! (. * l) {3}) [waterfl] + $ '] (https://regex101.com/r/fW3rK4/1) für Ihr Beispiel. –

Antwort

3

Sie sollten keine Regex dafür verwenden, es wird höllisch sein, jedes Mal benutzerdefinierte Regex zu pflegen oder zu generieren. Sie können diese Methode verwenden:

Verwandte Themen