Sie sind vermutlich noch nicht im Forum angemeldet - Klicken Sie hier um sich kostenlos anzumelden Impressum 
Sie können sich hier anmelden
Dieses Thema hat 0 Antworten
und wurde 854 mal aufgerufen
 L 7
Gero Offline




Beiträge: 2.789

28.12.2010 21:25
Lektion 7 Zitat · Antworten

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:

CABS CAFE CAKE CALF CALL CALX CAMP CANT CAPA CAPE CAPS CARS CASH CAST CAVA CENT CERA CERS CHAN CHAT CHEF CHIC CHIP CHIS CHOR CIAO CIRE CITO CITY CLAN CLIP CLOG CLOS CLOU CLUB COAT COBS COCA CODA CODE COIL COIR COLA CONI COOL COPS COPY CORD CORE COUP COUR CREM CREW CRUS CRUX CUPS CURE CURL CUTS CUTT CYAN

Jetzt variieren wir: Wir fordern alle vierbuchstabigen Wörter, die mit CA anfangen: „^CA..$“ matcht 15 Treffer:

CABS CAFE CAKE CALF CALL CALX CAMP CANT CAPA CAPE CAPS CARS CASH CAST CAVA

Jetzt fordern wir alle vierbuchstabigen C-Wörter, die mit CA oder CI anfangen: „^C[AI]..$“ matcht 19 Treffer:

CABS CAFE CAKE CALF CALL CALX CAMP CANT CAPA CAPE CAPS CARS CASH CAST CAVA CIAO CIRE CITO CITY

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!

CABS CAFE CAKE CALF CALL CALX CAMP CANT CAPA CAPE CAPS CARS CASH CAST CAVA CENT CERA CERS CHAN CHAT CHEF CHIC CHIP CHIS CHOR CIAO CIRE CITO CITY CLAN CLIP CLOG CLOS CLOU CLUB

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:

CABS CAFE CAKE CALF CALL CALX CAMP CANT CAPA CAPE CAPS CARS CASH CAST CAVA CENT CERA CERS CIAO CIRE CITO CITY CLAN CLIP CLOG CLOS CLOU CLUB COAT COBS COCA CODA CODE COIL COIR COLA CONI COOL COPS COPY CORD CORE COUP COUR CREM CREW CRUS CRUX CUPS CURE CURL CUTS CUTT CYAN

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:

CABS CAFE CAKE CALF CALL CALX CAMP CANT CAPA CAPE CAPS CARS CASH CAST CAVA CENT CERA CERS CIAO CIRE CITO CITY CLAN CLIP CLOG CLOS CLOU CLUB COAT COBS COCA CODA CODE COIL COIR COLA CONI COOL COPS COPY CORD CORE COUP COUR CREM CREW CRUS CRUX CUPS CURE CURL CUTS CUTT CYAN

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!

 Sprung  
Xobor Forum Software von Xobor.de
Einfach ein Forum erstellen
Datenschutz