In diesem Beitrag möchte ich dir zeigen, wie du mit regulären Ausdrücken Text auf dem Arduino prüfen kannst.
Mit regulären Ausdrücken kannst du Text auf eine bestimmte Syntax oder das Vorhandensein von Daten prüfen. Hierzu zählt zbsp. das Prüfen auf den korrekten Aufbau einer E-Mail, Telefonnummer etc. Man kann aber auch prüfen oder zählen, wie oft eine Zeichenkette in einem Text vorkommt.
Die regulären Ausdrücke sind manchmal sehr kompliziert und lassen sich auch ebenso gerade für Anfänger schwer lesen, hier hilft ein online-Tool wie https://regex101.com/ weiter, welcher dir beim Aufbau und Texten hilft.
Die Arduino IDE liefert per Default keine Funktionalität zum Ausführen von regulären Ausdrücken, hier müssen wir uns einer externen Bibliothek behelfen, welche wir über den Bibliotheksmanager installieren.
Der Entwickler hat im einen extra Forumeintrag unter https://forum.arduino.cc/t/new-regular-expression-library-released/59770 verfasst und dort die Funktionalität dieser Bibliothek beschrieben.
Achtung: Dieser Beitrag kann nicht alle RegEx behandeln, dafür gibt es einfach zu viele. Ich möchte mich hier auf einige wenige beschränken.
Aufbau eines regulären Ausdrucks
Ein regulärer Ausdruck muss einem bestimmten Format entsprechen. Wollen wir prüfen, ob ein Text mit einem bestimmten Buchstaben beginnt, so müssen wir das Zeichen ^ voranstellen.
Mit dem $ Zeichen am Ende stellen wir sicher, dass keine weiteren Zeichen mehr folgen sollen.
Um Buchstaben von einer bestimmten Range zu behandeln, schreibt man diese in eckigen Klammern. Somit ergibt sich zbsp. ein regulärer Ausdruck zum Prüfen auf den Namen Stefan.
^Stefan$
regulären Ausdruck (RegEx) am Arduino Nano
Wollen wir zunächst einen einfachen kleinen Text prüfen, ob in diesem Kleinbuchstaben von a bis z enthalten sind.
// Bibliothek für die funktionalität für reguläre Ausdrücke #include <Regexp.h> void setup() { // beginn der seriellen Kommunikation mit 9600 baud Serial.begin(9600); // der Text welcher geprüft werden soll char* text = "Test"; // ein Matcher Objekt MatchState ms; // zuweisen des Zieles welches getestet werden soll ms.Target(text); // prüfen mit einem regulären Ausdruck, // es sollen klein Buchstaben von a bis z enthalten sein char result = ms.Match("[a-z]", 0); // Wenn der Text die Bedingung nicht erfüllt, dann... if (result == REGEXP_NOMATCH) { Serial.print("nicht "); } Serial.println("OK"); } void loop() { // bleibt leer }
Der Code bewirkt, dass auf dem seriellen Monitor der Arduino IDE “OK” ausgegeben wird.
Wenn man jetzt prüfen möchten, ob der Text gleich “Test” ist, dann muss man den nachfolgenden regulären Ausdruck verwenden.
^Test$
prüfen eines Datums
Ein Datum gibt wiederum eine Besonderheit, denn dieses enthält einen Punkt, dieser Punkt steht im RegEx für ein beliebiges Zeichen, damit wir diesen Punkt jedoch als diesen behandeln können, muss dieser escaped werden. Den Punkt escaped man mit einem Backslash davor.
Nehmen wir das deutsche Datumsformat wie 01.12.2022, dann ergibt sich nachfolgender regulärer Ausdruck.
[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9]
Eigentlich gibt es für die Prüfung auf exakte Anzahl von Buchstaben oder Zahlen die Möglichkeit, mit geschweiften Klammern zu arbeiten, jedoch unterstützt diese Bibliothek es leider nicht.
[0-9]{2}\.[0-9]{2}\.[0-9]{4}
1 thought on “Arduino – reguläre Ausdrücke verwenden”