ruby-mine

exploring the mine

Reguläre Ausdrücke, Teil 0.0: Was sind eigentlich diese ominösen "regulären Ausdrücke"?

von wonado am 04.04.2009 (23 Uhr)

von WoNáDo

Ich habe ein Problem. Nachdem inzwischen Teil 8 dieser Serie existiert, die bei Teil 1 begann, tauchte immer wieder mal die Frage nach einführenden Texten auf. Es wäre bestimmt verwirrend diese beispielsweise als Teil 9 bis Teil 13 zu führen, um dann als Teil 14 wieder etwas in der Preislage "wie quetsche ich das Letzte aus Oniguruma raus?" anzufügen.

Nun gibt es noch die 0, die selbstverständlich sehr geeignet für diese Zwecke ist - aber es gibt davon nur eine!

Also mache ich es ähnlich wie Ruby, indem ich einfach durch einen Punkt getrennt Unterpunkte einführe, damit ich vor der 1 noch reichlich Platz habe.

Klar? - Dann fange ich mal ganz langsam an... - ...ehe ich es vergesse: Bei den Nuller-Teilen sind Kopfschmerztabletten eher unnötig. Die Teile, die sich mit theoretischen Aspekten beschäftigen, können frei nach dem Motto "Mut zur Lücke" überlesen werden. Mit den Anwendungen regulärer Ausdrücke in Ruby wird man trotzdem zurecht kommen.

Wenn reguläre Ausdrücke eine Antwort sind, was ist dann die zugehörige Frage?

Angenommen in irgendwelchen Protokollen kommen hin und wieder Zeilen vor, die mit S056-21:, R007-01:, Q995-99: oder ähnlich anfangen. Für mich ergibt sich sofort eine Frage: Was bedeutet das Wort ähnlich in diesem Zusammenhang?

Ich würde es so interpretieren, dass eine Beschreibung der zu suchenden Texte existiert, auf die die gezeigten Beispiele zutreffen und die eine Struktur vorgibt. Alle dieser Beschreibung entsprechenden Texte sind dann im Sinn dieser Beschreibung ähnlich. Jetzt sind wir zwar ein Stückchen weiter gekommen, jedoch auf Kosten von drei neuen Fragen:

  1. Woher erhält man Informationen über die zu beschreibende Struktur?
  2. In welcher Form kann man so etwas beschreiben?
  3. Wie kann ich überprüfen, ob ein Text der Beschreibung genügt?

Um die Spannung nicht ins Unerträgliche zu steigern, gebe ich jetzt einen ersten Hinweis. Zur Frage "In welcher Form kann man solch eine Struktur beschreiben?" ist "Durch reguläre Ausdrücke" eine mögliche Antwort.

Im Rest dieses Teils 0.0 und im Teil 0.1 der Serie geht es mir um eine erste Beantwortung aller drei Fragen.

Frage 1: Woher erhält man Informationen über die zu beschreibende Struktur?

Die Struktur kann irgendwo beschrieben stehen oder jemand kann die Beschreibung geben. Wenn das nicht der Fall ist - es soll ja angeblich auch vorkommen, dass eine Beschreibung "tbdl" (to be done later) lautet und die zugehörigen Entwickler schon vor Jahren das Land verlassen haben - dann muss man anhand von Beispielen und Verallgemeinerungen versuchen selber die Struktur zu ermitteln.

Falls eine Beschreibung, in welcher Form auch immer, zur Verfügung steht, hat man praktisch schon gewonnen. Diese Beschreibung muss dann letztendlich nur in eine Beschreibungssprache übersetzt werden. Dabei können natürlich auch ein paar Probleme auftreten - manchmal ist die Beschreibungssprache allein nicht mächtig genug um die vorgegebene Beschreibung formulieren zu können. Dazu komme ich aber später im Zusammenhang mit Frage 2.

Angenommen ich habe keine Beschreibung und finde niemanden, der mir eine geben kann.

Tja, dann fange ich mal einfach an. Ich nehme die drei Beispiele von vorhin und versuche eine umgangssprachliche Strukturbeschreibung zu erstellen. Ein erster Versuch ergibt "Am Zeilenanfang steht ein Großbuchstabe, gefolgt von drei Ziffern, einem Minuszeichen, zwei weiteren Ziffern und einem Doppelpunkt".

Und nun? - Zuerst einmal müssen selbstverständlich die Beispiele zur Strukturbeschreibung passen. Das ist der Fall. Kann ich nun davon ausgehen, dass diese Strukturbeschreibung richtig ist? - Nein, ich kann es nur hoffen!

Das ist eine Situation die jeder Physiker kennt. Ein Naturwissenchaftler kann eine Theorie nehmen und für konkrete Fälle prüfen, ob sie anwendbar ist. Das kann er so oft machen, wie er will, trotzdem kann der nächste Versuch fehlschlagen und die allgemeine Anwendung der Theorie einschränken. Ein Physiker kann also die Theorie nicht durch Versuche verifizieren, sondern immer nur Falsifikationsversuche durchführen, um sie in ihrer Allgemeingültigkeit zu widerlegen. Dabei nimmt selbstverständlich die Hoffnung auf Allgemeingültigkeit proportional zur Menge der erfolgreich verlaufenen Versuche zu.

Die Situation, in der sich jemand befindet, der eine Strukturbeschreibung aus Daten heraus erfinden muss, ist ähnlich. Auf die oben erstellte Strukturbeschreibung bezogen lässt sich sagen, dass drei Beispiele recht wenig sind. Aber selbst wenn ich viele hätte, die der Strukturbeschreibung entsprechen, kann ich Pech haben und die 465. wäre W255-109:. Dieser Text entspricht nicht der Strukturbeschreibung, weil er drei Ziffern vor dem Doppelpunkt enthält. Ein zugehöriger Suchprozess würde den Text ignorieren.

Es kann aber auch noch etwas ganz anderes passieren. Etwas, was in der Anwendung sogar schlimme Auswirkungen haben kann, besonders wenn Dritte über das Netz auf Daten zugreifen. Angenommen der gerade eben angeführte Fall tritt ein und die Beschreibung erkennt einen Text nicht, der aber der korrekten Struktur entsprechen würde. Wenn das Ganze Teil eine Web-Anwendung wäre, würde bestimmt irgendwann jemand nach diesem Text suchen und ihn nicht finden. Da er aber weiss, dass dieser Text vorkommen muss, wird er (hoffentlich) einen Fehler melden. Dieser kann dann korrigiert werden und die Welt ist wieder in Ordnung, bis der nächste Fehler dieser Art auftritt.

Wenn nun aber die für die Öffentlichkeit vorgesehenen Kennungen ausschliesslich mit den Großbuchstaben M bis Z beginnen dürfen, während die anderen Buchstaben nur für interne Kennungen benutzt werden, dann würde die Strukturbeschreibung viel mehr erkennen, als sie sollte. Im übelsten Fall erkennt das zufällig jemand, der mit Freude diese internen Daten für seine eigenen Zwecke gebrauchen kann, also diesen Fehler nie melden wird.

Zum Abschluss der Frage nach der Herkunft der Struktur, kann ich jedem nur raten, alles zu versuchen eine Beschreibung der Struktur zu erhalten. Wenn einem wirklich nichts anderes übrig bleibt, als aus vorhandenen Beispielen eine Struktur zu konstruieren, sollte man nicht nur daran denken, dass diese allen Beispielen entsprechen muss - sie darf auch nichts erkennen, was unerwünscht ist.

Letztendlich hilft hier nur Versuch und Irrtum weiter. Je mehr Erfahrung man damit schon gesammelt hat, desto einfacher wird es im Laufe der Zeit, allerdings ist man nie vor Fehlern sicher.

Auf die anderen beiden Fragen geht dann Teil 0.1 ein, der demnächst hier erscheinen wird.


Kommentar schreiben

Name (notwendig)

Mail (wird nicht veröffentlicht)

Webseite


Kommentare

  1. Skade schrieb am 05.04.2009 (13 Uhr)

    Damit es hier nicht so leer bleibt: auch wenn ich mit Regexp gut hantieren kann, ist diese Artikelserie doch immer wieder erhellend.