## 4 Die Menüpunkte ### 4.2 Bearbeiten #### 4.2.7 Suchen ... ##### 4.2.7.1 Reguläre Ausdrücke (regular expressions) Um die Suche weiter zu verfeinern, bietet Familienbande standardmäßig die Suche mit regulären Ausdrücken. Sie werden feststellen, dass Sie damit zwar ein sehr mächtiges Werkzeug haben, das aber nicht immer ganz einfach zu bedienen ist. In kleinen Stammbäumen werden Sie nicht auf reguläre Ausdrücke zurückgreifen müssen, Sie können sich diesen Abschnitt also ruhig für später aufheben. Sollten Sie irgendwann einmal mit den einfachen Suchmöglichkeiten nicht mehr zufrieden sein, kommen Sie auf dieses Kapitel zurück und lernen Sie die umfangreichen Möglichkeiten der regulären Ausdrücke kennen. Dieser Teil wurde, abgesehen von geringfügigen Anpassungen und Änderungen der Beispiele, aus dem Handbuch zu dem Newsreader MacSOUP entnommen und die Nutzung freundlicherweise von Stefan Haller gestattet. Ein herzlicher Dank dafür an dieser Stelle. Reguläre Ausdrücke stellen ein sehr leistungsfähiges Verfahren dar, um nach Textpassagen zu suchen, die einem bestimmten Muster entsprechen; z. B. jedes Wort, das nur aus Großbuchstaben besteht, oder jedes Vorkommen von zwei identischen Wörtern, die durch ein oder mehrere Leerzeichen getrennt sind, oder unzählige andere Muster. (Fragen Sie mich bitte nicht, warum diese Dinger reguläre Ausdrücke heißen. Die englische Bezeichnung ist "regular expression", und ich habe das einfach ins Deutsche übertragen, ohne mir weiter darüber Gedanken zu machen.) Der einfachste reguläre Ausdruck ist einfach ein Textstück, nach dem gesucht werden soll. Der reguläre Ausdruck xyz sucht also einfach nach dem Text «xyz». Es gibt aber eine Reihe von Zeichen, die in einem regulären Ausdruck eine besondere Bedeutung haben. Diese Zeichen sind: ( ) [ ] ^ $ . * + ? { } | \ Wenn Sie nach einem dieser Zeichen suchen wollen, müssen Sie ihm einen Rückwärts-Schrägstrich (Backslash) voranstellen. Wenn Sie z. B. nach dem Text «xyz?» suchen wollen, müssen Sie den regulären Ausdruck «xyz\?" benutzen. Um nach dem Rückwärts-Schrägstrich selbst zu suchen, schreiben Sie \\. Eine Ausnahme dieser Regel ist es, wenn die Sonderzeichen innerhalb eines Zeichenbereiches, also zwischen eckigen Klammern (s. u.), auftreten; in diesem Fall muss kein Rückwärts-Schrägstrich vorangestellt werden. Gut, aber was tun diese speziellen Zeichen nun eigentlich? Beginnen wir mit dem Punkt. Ein Punkt (.) ist eine Art Jokerzeichen, auf das jedes Zeichen passt (und zwar genau eins). Zum Beispiel findet der reguläre Ausdruck H.nd Die Textstellen «Hund», «Hand», «H=nd» usw. Er wird aber nicht den Text «Hnd» finden. Die Zeichen * und + sind Wiederholungsoperatoren, sie suchen nach wiederholtem Auftreten des vorausgehenden Musters. * sucht nach null- oder mehrmaligem Auftreten des Musters, + nach ein- oder mehrmaligem. Zum Beispiel findet der reguläre Ausdruck a+ die Textstellen «a», «aa», «aaaaaa» usw. Diese Operatoren gelten normalerweise nur für das unmittelbar vorausgehende Zeichen. Zum Beispiel findet der reguläre Ausdruck ab*c die Textstellen «ac», «abc», «abbbc» usw., aber nicht den Text «ababc». Wenn der Operator für mehr als ein vorausgehendes Zeichen gelten soll, müssen Sie Klammern verwenden; zum Beispiel findet a(xy)*b die Texte «ab», «axyb», «axyxyb» usw. Das Fragezeichen funktioniert ähnlich wie * und +, aber es sucht nur nach null- oder einmaligem Vorkommen des vorausgehenden Musters. Zum Beispiel findet ab?c die Textstellen «ac» und «abc», und sonst nichts. Der senkrechte Strich (|)1 ist ein ODER-Operator. Er sucht nach dem Vorkommen entweder seines linken oder seines rechten Operanden. Zum Beispiel findet der Ausdruck abc|xyz die Textstellen «abc» und «xyz», und keine anderen. Anders als *, + und ? gilt der Operator | nicht nur für die Zeichen unmittelbar neben ihm, sondern für alles bis zum Anfang und Ende des regulären Ausdrucks. Wenn Sie ihn auf einen Teil des Ausdrucks beschränken wollen, müssen Sie Klammern benutzen; zum Beispiel H(u|ir)t um die Textstellen «Hut» oder «Hirt» zu finden. ^ und $ beschränken die Suche auf den Anfang bzw. das Ende einer Zeile2. Der Ausdruck ^xyz findet den Text «xyz» nur dann, wenn dieser am Anfang einer Zeile auftritt, und xyz$ findet den Text «xyz» nur, wenn er das Ende einer Zeile bildet. Der reguläre Ausdruck ^xyz$ findet jede Zeile, die nichts weiter als den Text «xyz» enthält. Eckige Klammern können benutzt werden, um eine Zeichenmenge anzugeben. Zum Beispiel findet der Ausdruck [abcd] die einzelnen Zeichen «a», «b», «c» oder «d» (und sonst nichts). Sie können einen Bindestrich benutzen, um einen ganzen Bereich anzugeben, zum Beispiel [0-9] um nach einer einzelnen Ziffer zu suchen. Sie können solche Bereiche mit einfachen Aufzählungen einzelner Zeichen kombinieren; z. B. findet der Ausdruck [a-zA-Z0-9+=] einen Groß- oder einen Kleinbuchstaben, eine Ziffer oder eines der Zeichen + oder =. Wenn Sie einen Bindestrich in die Zeichenmenge aufnehmen wollen, muss er das erste oder letzte Zeichen in der Menge sein, denn sonst würde er als Bereichsangabe interpretiert werden. Wenn das erste Zeichen nach der öffnenden eckigen Klammer ein ^ ist, dann wird jedes Zeichen gefunden, das nicht in der Menge angegeben ist. { } ist ein weiterer Wiederholungsoperator, ähnlich wie * und +, außer dass Sie die minimale und maximale Anzahl der Wiederholungen angeben können. Die allgemeine Syntax ist p{m,n}, wobei p das Muster ist, nach dem Sie suchen wollen (entweder ein einzelnes Zeichen oder ein Teilausdruck in runden Klammern), m die minimale und n die maximale Anzahl der Wiederholungen. Zum Beispiel findet der Ausdruck (xy){2,4} die Textstellen «xyxy», «xyxyxy» oder «xyxyxyxy» (sonst nichts). Spezielle Formen sind {n,} um nach n oder mehr Wiederholungen zu suchen, und {n} für die Suche nach genau n Wiederholungen. Zum Beispiel findet der Ausdruck x{5} Die Textstelle «xxxxx» und sonst nichts. Der Rückwärts-Schrägstrich gilt immer in Verbindung mit dem direkt folgenden Zeichen. Wir haben bereits gesehen, dass er dazu benutzt werden kann, nach einem der Sonderzeichen zu suchen. Weitere Anwendungen des RückwärtsSchrägstrichs: \t sucht nach einem Tabulatorzeichen, und \n nach einem Zeilenwechsel. \b beschränkt die Suche auf eine Wortgrenze, also auf den Anfang oder das Ende eines Wortes. Zum Beispiel findet \bA[a-z]* jedes Wort, das mit einem großen A beginnt, und \bMac\b findet nur das Wort «Mac», aber nicht «Macintosh» oder «MacDonald». Beispiele Sehen wir uns nun einige nützliche Beispiele an, wie reguläre Ausdrücke in der Praxis sinnvoll eingesetzt werden können.
Meier | findet Meier
M[a|e]ier | findet Maier und Meier
M[a|e][i|y]er | findet Maier, Meier, Mayer und Meyer
M[a|e][i|y]e?r | findet Mair, Meir, Mayr, Meyr, Maier, Meier, Mayer und Meyer
Achtung! Familienbande unterscheidet nicht die Groß- und Kleinschreibung! Dadurch werden auch Namen wie Huchzermeier (und Meierahrend, weil «meier» darin vorkommt) in den oben genannten Beispielen gefunden. In Familienbande wird der Datensatz in die Ergebnistabelle übernommen, wenn bei einer Suche eines der möglichen Ergebnisse gefunden wird. Somit wird bei dem Suchwort Meier Sowohl Meier als auch Meierahrend gefunden. Um solches auszuschließen müssen Sie die Wortgrenzen mit angeben. Also zum Beispiel: Meier\b um alle zu finden, deren Name mit «meier» endet, oder \bMeier wenn er mit «Meier» beginnen soll. Natürlich funktioniert auch \bMeier\b Wenn Sie nur genau «Meier» finden wollen. Auch wenn Sie nicht wissen, ob die gesuchte Person mit ihrem Ehenamen oder dem Geburtsnamen eingetragen ist, können Sie die Regulären Ausdrücke nutzen. So findet Meier|Schulz alle Personen mit dem Namen Meier und auch die mit dem Namen Schulz (und auch solche mit den Namensbestandteilen, also Schulze, Ebmeier, Meierkord, etc.) Ich hoffe, durch die Beispiele wurden die umfangreichen Möglichkeiten der regulären Ausdrücke in der Suchfunktion von Familienbande verständlich genug erklärt. In den meisten Fällen wird es genügen, wenn Sie einfach den Suchbegriff oder einen Teil davon im Suchfeld eingeben. Das Ergebnis kann dann durch sortieren nach einer sinnvollen Spalte zur weiteren Eingrenzung genutzt werden. Der Forscher mit umfangreichen Stammbäumen wird dennoch durch Familienbande bestmöglich unterstützt. Im Anhang finden Sie eine Liste der in Familienbande möglichen Suchmuster (regulären Ausdrücke). Unter Mac OS X erzeugen Sie den senkrechten Strich mit der Tastenkombination [Alt] + [7]. Unter Windows erzeugen Sie ihn mit der Tastenkombination [AltGr] + <. Das werden Sie in Familienbande recht selten benötigen, da Sie hier die Möglichkeit haben, sich für ein bestimmtes Eingabefeld zu entscheiden. Ich habe die Beschreibung der Vollständigkeit halber drinnen gelassen.