Lektion 7 Der Ausschluss von Buchstaben bei der Wortsuche
In der heutigen Lektion kommen wir unserem großen Ziel, nämlich der Suche nach allen Wörtern mit einem (oder auch zwei) solitären C mit bis zu max. 4 Buchstaben Länge, deutlich näher.
Als ersten Schritt hierzu lernen wir, wie man sich bei der Wortsuche auf bestimmte Buchstaben konzentriert. Wir fangen ganz einfach an, gültig sind alle Kategorien:
Der Suchbefehl „^C...$“ liefert bzw. matcht alle vierbuchstabigen Wörter, die mit einem C anfangen. Es werden 61 Treffer gematcht:
Wir lernen hier den Begriff einer Zeichengruppe kennen:
Die eckigen Klammern umschließen eine Liste, einen Bereich von Zeichen oder beides. [abc] z.B. bedeutet "jedes einzelne Zeichen, das a, b oder c ist". Ein Bindestrich (-) zwischen zwei Zeichen definiert einen Bereich. [a-z] z.B. bedeutet "jedes einzelne Zeichen vom kleinen "a" bis zum kleinen "z""
Dies vorausgeschickt ist es uns nun ein Leichtes, alle vierbuchstabigen C-Wörter herauszufinden, wo der zweite Buchstabe in der ersten Hälfte des Alphabets sein muss: „^C[A-L]..$“ matcht 35 Treffer!
Man kann hier auch kombinieren: "^C[A-LU]..$" liefert neben diesen 35 Treffern zusätzlich 5 weitere Wörter, die mit CU anfangen:
CUPS CURE CURL CUTS CUTT
Mit der Abfrage „^C[A-GIJL-Ü]..$“ erreichen wir, dass der zweite Buchstabe weder ein H noch ein K kann, wir haben diese Buchstaben in der Definition der gültigen Zeichen für den bzw. im Klammerausdruck außen vor gelassen. Ergänzend ist anzumerken, dass die Umlaute AÖÜ in der Sortierreihenfolge nach dem Z kommen. Es werden 54 Treffer erzielt:
Allerdings erscheint dieser Suchbefehl doch etwas umständlich. Besser wäre es ihn so zu formulieren, dass alle Buchstaben mit Ausnahme von H und K gelten dürfen.
Das geht so: „^C[^HK]..$“
Für uns wirkt diese Abfrage auf den ersten Blick befremdlich: Das ^ ist doch ein Ankerzeichen, mit dem wir das Suchmuster am Anfang der zu durchsuchenden Zeichenkette bzw. hier der zu durchsuchenden Wörter „verankern“
Hier bitte ich aufzupassen: Es entspricht der Ökonomie von RegEx, mit möglichst wenig Zeichensymbolen auszukommen. Deswegen kann ein Symbol wie das ^ durchaus mehrere Bedeutungen haben, und zwar abhängig vom Kontext, in dem es verwendet wird. Innerhalb einer eckigen Klammer wird ^ wie folgt interpretiert:
[^...] findet jedes einzelne Zeichen, das nicht in der Zeichengruppe enthalten ist. [^0-9xyz] findet z.B. jedes einzelne Zeichen, das weder eine Ziffer noch einer der Buchstaben x, y oder z ist.
"^C[^HK][^HK][^HK]$" matcht zum Beispiel alle vierbuchstabigen Wörter, die mit C anfangen und ohne H und K auskommen. Das Ergebnis ist fast ident mit der bereits beschriebenen Abfrage „^C[A-GIJL-Ü]..$“, es werden hier anstatt 54 aber nur 52 Treffer ausgegeben:
CAKE und CASH fehlen hier – diese Wörter enthalten ein K bzw. H an der dritten bzw. vierten Stelle!
"^C[^HK][^HK][^HK]?$" matcht zum Beispiel alle drei-und vierbuchstabigen Wörter, die mit C anfangen und ohne H und K auskommen. Es werden 64 Treffer erzielt, folgende 12 Wörter kommen zum vorherigen Abfrageergenis hinzu:
CAB CAP CAR CER CES CIS COB COP COX CRU CUP CUT
Der feine Unterschied zur vorherigen Abfrage „^C[^HK][^HK][^HK]$“ ist das ? nach der letzten Zeichengruppe [^HK].
Wir erinnern uns: Das Fragezeichen als Quantor findet entweder kein oder genau ein Vorkommen des vorangehenden Zeichens oder Zeichengruppe.
Wenn es [^HK] nicht findet bzw. auslässt, bedeutet dies nichts anderes, dass dann die Suchergebnisse nur dreibuchstabige Wörter sind. Mit Hilfe des MiniMax-Befehls können wir den Suchstring sogar etwas kürzer fassen:
"^C[^HK]{1,3}$"
Übersetzt heißt das:
^C Wir suchen ein Wort, das mit C anfängt.
^C[^HK] Nach dem C darf ein beliebiges Zeichen - hier Buchstabe – folgen, dass jedoch weder ein H noch ein K sein darf.
^C[^HK]{1,3} Der beliebige Buchstabe muss minimal ein- bis maximal dreimal vorkommen, aber immer gilt, dass es weder ein H noch ein K sein darf.
^C[^HK]{1,3}$ Das Dollarzeichen stellt sicher, dass spätestens nach dreimaligen Vorkommen das Wortende erreicht sein muss – zusammen mit dem C kann das Wort daher nicht länger als vier Buchstaben lang sein.
Hier die im Rahmen des Turtorials letzten Hausaufgaben:
1. Warum matcht der Suchstring „^C[^HK]{2,3}$“ genauso viel Treffer wie der Suchstring „^C[^HK]{1,3}$“ 2. Wie finde ich alle maximal vierbuchstabigen Wörter ohne H und K, die mit einem C aufhören?
In der letzten Lektion 8 lernen wir die Oder-Verknüpfung kennen.
Gero
Download: Geros Superdic, was sonst! | Discussion: Forum | News: Twitter | ... und im übrigen bin ich der Meinung, dass Wordfinder beim online-Spiel pfui sind!