02.09.2013 Aufrufe

Reguläre Sprachen, reguläre Ausdrücke - Links

Reguläre Sprachen, reguläre Ausdrücke - Links

Reguläre Sprachen, reguläre Ausdrücke - Links

MEHR ANZEIGEN
WENIGER ANZEIGEN

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]

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!