Erinnert ihr euch noch an die Rechtschreibreform von 1996? Im Zuge derer wurde unter anderem aus der Schiffahrtgesellschaft die Schifffahrtgesellschaft (mit dreifachem F). Was aber, wenn ich in einem Text nach dem Begriff suchen möchte und nicht sicher bin, ob der Verfasser nach der alten oder neuen Rechtschreibregelung agiert hat?
Die Lösung lautet RegEx.
Okay, das stimmt natürlich nicht ganz, bei einem so einfachen Beispiel lässt sich getrost weiterhin die Suchfunktion des Worddokuments verwenden. Was aber, wenn es sich hier um sehr viel komplexere Suchen handelt – etwa solche, wie wir sie bei eguana SCALES verwenden?
Wie sich mithilfe von gewissen Suchmustern selbst komplexeste Zeichenabfolgen nicht nur finden, sondern auch definieren lassen, erklären wir euch in diesem Beitrag.
*****
RegEx – wer dabei an den Regionalexpress der ÖBB denkt, irrt. Gemeint sind „Regular Expressions“. Das sind Zeichenabfolgen, durch die mithilfe bestimmter vorab festgelegter Regeln Zeichenketten gefunden und definiert werden können.
Unser Development-Team benötigt RegEx beispielsweise, um gewisse Dinge in einem Code zu finden oder um zu kontrollieren, ob von Kunden getätigte Eingaben im Programm korrekt durchgeführt wurden – und im weiteren Verlauf auch für die Darstellung von Baustellen in SCALES.
Aber von Anfang an. Wir starten mit einem Kuchenbeispiel (wie könnte es auch anders sein).
Schokoschock
Stell dir vor, Du bist Lektor für ein Kochbuch und der Autor hat 300 Seiten Fließtext geschickt – mit leider absolut inkonsistenter Schreibweise für „Schokokuchen“. Mit RegEx kannst du mit nur einer einzigen Suche sämtliche kreativen Schreibweisen finden. Das könnte dann etwa so aussehen:
[Ss]choc?ko-?([Kk]uchen|[Mm]uffin)
- […] Gesucht wird nach einem der Zeichen innerhalb der eckigen Klammer. In unserem Fall [Ss] bedeutet das, dass Schokokuchen sowohl mit großem als auch mit kleinem S geschrieben werden kann. Dasselbe gilt für [Kk] und [Mm].
- ? Das Zeichen vor dem Fragezeichen KANN, muss aber nicht in der gesuchten Passage vorkommen. (Wobei man Schokolade natürlich in keiner Rechtschreibregel mit CK schreibt) Es könnte also sowohl Schoko-Kuchen als auch Schoko-Muffin heißen.
- | Für durch einen Strich getrennte Begriffe gilt: Beide Optionen sind möglich, also sowohl Kuchen als auch Muffin.
Und wofür die ganze Mühe?
Es gibt also, ähnlich wie bei einem LEGO-Baukasten, einfache Bausteine, mit denen man beliebig viele komplexe Ausdrücke überprüfen kann.
Bei eguana haben wir in der Regel aber leider seltener mit Schokoladenkuchen zu tun, als wir gerne hätten, dafür aber vielmehr mit Baustellenparametern. Und davon gibt es eine ganze Menge.
Messungen oder Injektionen werden in eguana SCALES immer genau einem Punkt zugeordnet, wobei die Benennung der Punkte meistens nach einer projektspezifischen, Vorgabe erfolgt. Das Schema, nachdem ein Punkt benannt wird, könnte also so aussehen:
Abschnitt der Tunnelröhre (A, B, C, …)
+ Tunnelmeter, an dem sich der Punkt befindet (0-200)
+ Bohrlochposition entlang der Tunnelwand (a-z)
+ die Tiefe im Bohrloch (0-12m).
B015r03 befindet sich also in Tunnelabschnitt B an Meter 15, in Position r bei einer Tiefe von drei Metern. Wenn ich also wissen möchte, wie es um die Meter 15 bis 20 in Abschnitt B bestellt ist, könnte ich mit RegEx nach B0(1[5-9]|20)[a-z][0-9]{2} suchen.
(Wer verwirrt ist: Der Abschnitt „0(1[5-9]|20)“ bedeutet, dass zunächst eine Null kommt und danach entweder eine 1, gefolgt von 5, 6, 7, 8 oder 9, oder eine 20..)
Mögliche Fehlerquellen
Dieses Schema ist von uns gut durchdacht und (so kompliziert es auch aussieht) bereits so fehlerresistent wie nur irgendwie möglich. Deshalb befindet sich beispielsweise ein Buchstabe (a-z) zwischen den beiden Zahlenwerten. Wäre dieser Buchstabe nicht gegeben, könnte die Benennung unseres Punktes so aussehen: B01503. Die zwei Zahlen korrekt voneinander zu trennen, funktioniert nur, wenn die Person genau weiß, wie viele Stellen beide Zahlen haben sollen.
Was aber, wenn in der Eile auf die führenden Nullen vergessen wird? Aus Tunnelmeter 015 wird etwa Tunnelmeter 15, und aus unserem Punkt B1503. Was sind dann meine beiden Zahlenwerte? Tunnelmeter 15 und Tiefe 03? Oder Tunnelmeter 150 und Tiefe 3?
Die korrekte Zuordnung über den Namen ist aber wichtig für die Visualisierung der Baustelle in SCALES. Fehler in der Eingabe führen zu falschen Zuordnungen, Probleme sind dann vorprogrammiert.
Die Suchabfrage ist also wirklich schon komplex genug – auch ohne unterschiedliche Schreibweisen. Man stelle sich vor, ein SCALES-Nutzer verwendet Großbuchstaben, um die Position festzulegen, während ein anderer Nutzer kleine Buchstaben verwendet – und ein dritter wiederum verwendet nicht immer Meter von 1 bis 100, sondern ab und zu auch Fuß. Unsere Entwickler würden Tage damit zubringen, Suchstrings für die diversen Eingabearten zu generieren.
Klingt spannend?
Finden wir auch! Als Bernhard uns das Thema in einem unserer internen TechTalks präsentiert hat, war für uns sofort klar: Das muss in den Blog.
Weil wir es super spannend finden (das reicht eigentlich schon).
Weil wir hier im Blog-Team sehr pedantisch sein können, wenn es um korrekte Schreibweise geht.
Und weil wir es spannend finden, auch mal einen Einblick zu erhalten – und weitergeben zu können – was unsere Entwickler so beschäftigt:
Wer jetzt Lust bekommen hat, selbst ein bisschen mit RegEx zu spielen, kann das Tool unter https://regex101.com/ testen.
Wir wünschen viel Spaß beim Ausprobieren!
*****
PS: Für die Schifffahrtgesellschaft gilt: Schifff?ahrtgesellschaft sieht unsere Suche übrigens wie folgt aus:
Durch das Fragezeichen nach dem dritten F KANN es im Wort vorkommen, muss es aber nicht.
The End
Oder doch nicht?
Wer noch immer nicht genug hat und seine Fähigkeiten testen will, für den ist das RegEx-Kreuzworträtsel genau das richtige!