Reguläre Sprachen, reguläre Ausdrücke - Links
Reguläre Sprachen, reguläre Ausdrücke - Links
Reguläre Sprachen, reguläre Ausdrücke - Links
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
trägt, ist ganz einfach zu realisieren: Der Punkt in .* muss durch etwas ersetzt werden, was neben<br />
einzelnen Zeichen auch maskierte Zeichenreihen enthält, nämlich durch [^"]|"[^"]*" (ein<br />
harmloses Zeichen oder ein in Anführungszeichen eingeschlossener Text). Damit wird der oben<br />
angegebene Ausdruck zu<br />
([^"]|"[^"]*")*([^"]|"[^"]*")*<br />
Das sieht schlimm aus, aber nur für den, der bei der Entstehung nicht dabei war.<br />
Mehrfach maskierter Text<br />
Gibt es mehrere Möglichkeiten der Maskierung in der Weise, dass sich die zur Maskierung<br />
eingesetzten Zeichen sogar gegenseitig maskieren können, kann die Erstellung eines <strong>reguläre</strong>n<br />
Ausdrucks wie im letzten Beispiel schnell unübersichtlich werden. Als Beispiel soll nun ein <strong>reguläre</strong>r<br />
Ausdruck für alle jene Unix-Kommandozeilen konstruiert werden, bei denen alle mit Apostroph oder<br />
Anführungszeichen begonnenen Texte ordnungsgemäß abgeschlossen sind. Im einzelnen gelten dafür<br />
die folgenden Regeln:<br />
Ein mit Apostroph begonnener Text muss mit Apostroph abgeschlossen werden.<br />
Ein mit Anführungszeichen begonnener Text muss mit Anführungszeichen abgeschlossen<br />
werden.<br />
Ausserhalb des von Apostrophen eingeschlossenen Textes maskiert ein inverser Schrägstrich das<br />
folgende Zeichen. (Diese Regel ist hier insofern ungenau wiedergegeben, als es eigentlich darauf<br />
ankommt, wann der inverse Schrägstrich für sich selbst steht und wann er das nachfolgende<br />
Zeichen maskiert, ob also \a für die zwei Zeichen \ und a oder nur für ein unnötigerweise<br />
maskiertes a steht. Im Zusammenhang unserer Aufgabe spielt das aber keine Rolle: hier kommt<br />
es nur darauf an, welche der Zeichen ’, " und \ durch \ maskiert werden, und dafür ist die<br />
angegebene vereinfachte Formulierung gut genug.)<br />
Die Aufgabe kann man durchaus in derselben Weise zu lösen versuchen wie die vorige. Viel besser ist<br />
es aber, systematisch vorzugehen und sich alle Möglichkeiten aufzuschreiben, wie die verschiedenen<br />
Maskierungszeichen aufeinander einwirken. Nur: mit einer solchen Tabelle kommen wir bei unserem<br />
jetzigen Wissensstand nicht weiter. Deswegen wird die Darstellung des vollständigen Lösungsweges<br />
[S.35] in den Theorie-Teil dieses Artikels verlegt und hier nur die fertige Lösung verraten:<br />
([^’"\]|[\].|[’][^’]*[’]|["]([^"\]|[\].)*["])*<br />
Gregorianische Kalenderdaten<br />
Es soll ein <strong>reguläre</strong>r Ausdruck angegeben werden, der genau die Kalenderdaten in der Schreibweise<br />
nach ISO 8601 (http://www.cl.cam.ac.uk/~mgk25/iso-time.html) (also Jahr-Monat-Tag mit<br />
vierstelligen Jahreszahlen und zweistelligen Monats- und Tagesangaben) beschreibt. Wir konstruieren<br />
diesen Ausdruck, indem wir zunächst Variable einführen und diese dann ersetzen, um den fertigen<br />
Ausdruck zu erhalten.<br />
V seien die durch vier teilbaren zweistelligen Zahlen außer 00:<br />
20<br />
V = 0[48]|[2468][048]|[13579][26]