Reguläre Ausdrücke kommen aus der Informatik und werden u.a. in der
Textverarbeitung verwendet, darunter auch bei der Suche, daher
kommen sie auch in vielen Korpus-Abfragesystemen zum Einsatz. Es
gibt viele Implementierungen von regulären Ausdrücken, die von DWDS
verwendete ist eine der am häufigsten verwendeten. Im Folgenden
werden die wichtigsten Bildungsregeln von regulären Ausdrücken und
deren Verwendung in DWDS zusammengefasst.
/Hund/ /H.nd/ /H[aiu]nd/ /H[^aiu]nd/ |
/Hund|Katze/ /(Jag|Win)dhund/ /(Jag|Win)?dhund/ |
/Hund*/ /Hund+/ /Hund?/ /H.{1,3}d/ |
/^Hund/ /Hund$/ /^Hund$/ /Hund/g /^Hund|Katze$/ |
/^(.r).*\1$/ /Hund/i !/Hund/ |
Zunächst zwei Hinweise, die für alle regulären Ausdrücke in DWDS
gelten:
- Das Abfragesystem muss zwischen regulären Ausdrücken und
Zeichenmustern mit Platzhaltern unterscheiden können: In DWDS wird
ein regulärer Ausdruck zwischen Schrägstriche eingeschlossen, also
ist z.B. ‚/hund*/‘ ein regulärer Ausdruck und kein
Zeichenmuster mit einem Platzhalter.
- Im Allgemeinen können reguläre Ausdrücke Muster für beliebige
Textteile bilden, die z.B. auch mehrere Worte oder Zeilen
umfassen. In DWDS sind sie jedoch auf einzelne Wortformen
beschränkt. Folglich können reguläre Ausdrücke in der
DWDS-Anfragesprache keine Leerzeichen enthalten.
Reguläre Ausdrücke in DWDS bestehen aus Kombinationen der folgenden
Typen von Ausdrücken:
- Zeichenausdrücke: Diese stehen für ein einziges Zeichen.
Es gibt folgende Typen von Zeichenausdrücken:
- Buchstaben, Ziffern, Bindestrich, Unterstrich: Diese stehen
für sich selbst.
Beispiele: /hund/, /Hunde/, /nd/, /7/,
/0123456789/, /Hunde-und-Katzen-Klo/, /_hund_/
- In DWDS wird Groß-/Kleinschreibung in regulären
Ausdrücken streng beachtet – es sei denn, ein
‚i‘ steht direkt (ohne Leerzeichen) nach dem
abschließenden Schrägstrich. Folglich sind z.B. /hund/
und /Hund/ unterschiedliche reguläre Ausdrücke und als
Anfrage ergeben unterschiedliche Treffer, während
z.B. /hund/i, /Hund/i, /HUND/i alle dieselben Treffer
finden.
- Der Punkt ‚.‘: Dieser steht für ein beliebiges
Zeichen (außer dem Leerzeichen).
Z.B. findet /H.nd/ die Wortformen Hund,
Hand, Händler, Hindernis, Honduras usw.
- Eine Zeichenklasse: eine Folge von Zeichen zwischen
eckigen Klammern. Eine Zeichenklasse steht für ein einziges
beliebiges Zeichen aus dieser Folge.
Z.B. findet
/H[aiu]nd/ die Wortformen Hund, Hand, Hindernis aber
nicht Händler, Honduras, Hain, Haus.
Bindestrich-Zeichenklasse: Es gibt eine Abkürzung für
Zeichenklassen, die aus Folgen von Buchstaben (gemäß der
Reihefolge der ASCII-Zeichensatzkodierung) bzw. aus Folgen von
Ziffern bestehen: z.B. ist /[a-e]/ äquivalent mit /[abcde]/,
und /[2-7]/ äquivalent mit /[234567]/.
- Da eine Bindestrich-Zeichenklasse mit Buchstaben auf dem
englischen Alphabet basiert, gehören Umlaute,
‚ß‘ und Zeichen mit Akzent wie ‚é‘
usw. nicht dazu; diese Buchstaben müssen extra angegeben
werden, z.B. lautet die Zeichenklasse für alle
Kleinbuchenstaben im deutschen Alphabet
‚[a-zäöüß]‘.
- Es gibt jedoch einige besondere Zeichenklassen, die
anders als Bindestrich-Zeichenklassen nicht auf das
englische Alphabet eingeschränkt sind (vorausgesetzt, das
Betriebsystem erkennt das entsprechende Alphabet):
- ‚[[:alpha:]]‘ steht für ein beliebiges
Zeichen des Alphabets (auch z.B. Umlaute).
- ‚[[:upper:]]‘ und
‚[[:lower:]]‘ stehen für beliebige Groß-
bzw. Kleinbuchstaben (auch z.B. Umlaute).
- Für die Zeichenklasse ‚[[:alpha:]]‘ gibt es
auch die Abkürzung ‚\w‘ (wie Wort) und
für die Zeichenklasse ‚[0-9]‘ die Abkürzung
‚\d‘ (wie digital).
- Eine negierte Zeichenklasse: eine Zeichenklasse, in
der das erste Zeichen ‚^‘ ist. Eine negierte
Zeichenklasse steht für ein einziges beliebiges
Zeichen außer den Zeichen nach ‚^‘.
Z.B. steht /[^a-dä]/ für genau ein Zeichen, das weder
‚a‘, ‚b‘, ‚c‘,
‚d‘, noch ‚ä‘ ist.
- Alternativen: Diese beinhalten eine Auswahl von durch
einen senkrechten Strich ‚|‘ getrennten Zeichenketten.
Eine Zeichenkette ist eine Folge von einem oder mehr
Zeichenausdrücken. Die Zeichenketten können wiederum selbst
Alternativen enthalten; d.h., Alternativen sind rekursive
Konstrukte, die wie folgt definiert sind:
- Sind Z1 und Z2 Zeichenketten, dann sind /Z1|Z2/ und /Z2|Z1/
Alternativen.
- Sind A1 und A2 Alternativen, dann sind /A1|A2/ und /A2|A1/
Alternativen.
Z.B. /Hund|Katze/, /Hund|Katze|Maus/,
/Hund|Katze|Maus|Pferd/ usw.
- Alternativen können zur Abgrenzung von anderen Teilen des
regulären Ausdrucks in runde Klammern eingeschlossen
werden: /Z1(A1|A2)Z2/
Z.B. findet /Schu(l|tz)m/
Schulmeister, Schulmädchen,
Schulmappe, Schutzmappe,
Schutzmauer, Schutzmittel usw. (aber nicht den
Namen Schultzmann).
- Quantoren: Diese ermöglichen die Suche nach wiederholten
Vorkommen von Zeichenketten oder Alternativen. Um die Reichweite
des Quantors eindeutig zu machen, muss eine quantifizierte
Zeichenkette aus zwei oder mehr Zeichenausdrücken (dazu zählen
natürlich auch Alternativen) in runde Klammern eingeschlossen
sein. Der Quantor steht direkt nach einem einzelnen
quantifizierten Zeichenausdruck bzw. nach der abschließenden
Klammer um die Zeichenkette. Die DWDS-Anfragesprache erkennt
folgende vier Quantoren (hier steht ‚Z‘ für eine
beliebige – evtl. in runde Klammern eingeschlossene –
Zeichenkette):
- /Z*/ steht für Null oder mehr aufeinander folgende Vorkommen
von ‚Z‘.
Denkaufgabe: Was für Tokens finden
diese regulären Ausdrücke: /.*/, /a*/, /(aa)*/ und /(..)*/ ?
- /Z+/ steht für ein oder mehr aufeinander folgende Vorkommen
von ‚Z‘.
Denkaufgabe: Was für Tokens finden
diese regulären Ausdrücke: /.+/, /a+/, /(aa)+/ und /(..)+/ ?
- /Z?/ steht für Null oder genau ein Vorkommen von
‚Z‘.
Denkaufgabe: Was für Tokens finden diese
regulären Ausdrücke: /.?/, /a?/, /(aa)?/ und /(..)?/ ?
- /Z{m,n}/ (wo m und n ganze Zahlen ≥
0 sind und m ≤ n): steht für
mindestens m und höchstens n Vorkommen von
‚Z‘.
n kann auch entfallen:
/Z{m,}/ bedeutet also mindestens m Vorkommen von
‚Z‘. /Z{,n}/ ist jedoch ungültig.
/Z{n}/ ist eine Abkürzung für /Z{n,n}/, bedeutet
also genau n Vorkommen von ‚Z‘.
- N.B.: In DWDS bedeutet ‚{0,0}‘ oder
‚{0}‘, dass keine Zeichenkette an dieser
Stelle im Token vorkommt; z.B. findet
‚/St{0}au/‘ Sau aber nicht Stau,
und dasselbe gilt für ‚/Sa{0}au/‘,
‚/Su{0}au/‘, ‚/S7{0}au/‘,
‚/S.{0}au/‘ usw.
Denkaufgabe: Welcher der folgenden regulären Ausdrücke findet
mehr Tokens und warum: /a(st){2}/ und /a(s.){2}/ ?
- Anker: Diese legen die Grenzen der Wortformen, die zu
einem gegebenen regulären Ausdruck passen, folgendermaßen fest:
- Ist ‚^‘ das erste Zeichen des regulären
Ausdrucks bzw. einer Alternative, dann ist das nächste Zeichen
der Anfang der Wortform.
N.B.: In einer negierten
Zeichenklasse kommt das Zeichen ‚^‘ frühestens an
zweiter Stelle im regulären Ausdruck bzw. in einer Alternative
vor (und zwar, nach ‚[‘) und kann daher nicht als
Anker verstanden werden.
- Ist ‚$‘ das letzte Zeichen des regulären
Ausdrucks bzw. einer Alternative, dann ist das vorangehende
Zeichen das Ende der Wortform.
- In der DWDS-Anfragesprache gibt es eine Abkürzung für
Anfragen mit beiden Ankern wie z.B. ‚/^Hund$/‘,
nämlich ‚/Hund/g‘.
Beispiele:
/^hand/ |
findet handlich, handeln aber nicht Schande,
gehandelt |
/Hund$/ |
findet Hund aber nicht Hunde |
/bel$|^abb/ |
findet Gabel, Nebel, übel, abbrechen, abbauen,
abberufen usw. aber nicht Gabeln, knabbert
usw. |
- Rückwärtsreferenzen: Diese ermöglichen die Suche nach
Tokens, die identische Zeichenketten an mehr als eine Stelle
enthalten. Eine Referenz hat die Form ‚\n‘,
wo n eine ganze Zahl zwischen 1-9 ist. Jede Referenz
bezieht sich auf eine vorangehende in runde Klammern
eingeschlossene Zeichenkette; die Referenz ‚\1‘ nimmt
die erste Klammergruppe (von links zählend) auf, ‚\2‘
die zweite Klammergruppe usw.
Beispiel: /^(..).*\1$/ findet
alle Tokens, die mit den gleichen zwei Zeichen anfangen und enden,
wie z.B. denkende, erster, einerlei.
Denkaufgabe: Findet der folgende reguläre Ausdruck dieselben
Tokens: /^(..).*(..)$/ ?
Ausschluss von Zeichenmustern: Im Prinzip gibt es in DWDS
die Möglichkeit, ein durch einen regulären Ausdruck gebildetes
Muster von der Trefferliste einer Anfrage auszuschließen, indem man
dem regulären Ausdruck das Zeichen ‚!‘ direkt (ohne
Leerzeichen) voranstellt: !/^H[au]nd$/
Wenn allerdings die
Anfrage nur aus einem solchen Ausdruck besteht, wird es
wahrscheinlich so viele Treffer geben, dass das System die Suche mit
einer Fehlermeldung abbricht. Am sinnvollsten ist diese Möglichkeit
als Teil einer Anfrage mit Abstandsangabe.
N.B.: zur Zeit
(04.2020) scheint DWDS diesen Ausdruck nicht richtig zu verarbeiten
- das Ausrufezeichen ‚!‘ wird einfach ignoriert.
Suche nach Sonderzeichen: Folgende Zeichen sind
Sonderzeichen in einem regulären Ausdruck: ‚.‘,
‚*‘, ‚+‘, ‚?‘, ‚$‘,
‚^‘, ‚(‘, ‚)‘ und
‚[‘ (aber nicht ‚]‘); d.h. sie stehen
generell nicht für sich selbst (mit einer Ausnahme, siehe unten)
sondern haben bestimmte Wirkungen, wie oben beschrieben. Steht aber
ein Rückwärtsschrägstrich ‚\‘ vor einem dieser Zeichen
innerhalb eines regulären Ausdrucks, dann ist es kein Sonderzeichen
mehr, d.h., dann steht es für sich selbst und kann als solches im
Korpus gesucht werden.
(Vgl. die Anmerkung zu
Sonderzeichen in Types in DWDS.)
N.B.: Innerhalb einer
Zeichenklasse oder einer negierten Zeichenklasse sind die
Sonderzeichen der regulären Ausdrücke jedoch normale Zeichen, wie
Buchstaben und Ziffern, d.h. sie stehen in der Zeichenklasse für
sich selbst (außer ‚^‘ an erster stelle, da es dann die
Zeichenklasse negiert).